“Use Strict” é necessário em um arquivo TypeScript?


126

Eu já vi posts sobre onde colocar a linha "use strict" em um arquivo de código TypeScript. Minha pergunta é: por que tem isso?

Como o TypeScript já é uma linguagem fortemente tipada, o que "use strict" adiciona?



12
O link que você forneceu define para que serve "use strict" em um arquivo JavaScript. Minha pergunta é se ainda é útil / necessário em um arquivo TypeScript em que os editores habilitados para TypeScript e TypeScript capturam a maioria / todos (?) Dos problemas que "use strict" capturariam.
DeborahK

Você também precisaria se estiver construindo para o ES6 e, em seguida, usando algo como Babel, ele requer que o script gerado contenha #"use strict";
BrunoLM

Não colocá-lo em TS arquivado, adicionar a bandeira em tsconfig.json --alwaysStrict: Parse no modo estrito e emitem "use strict" para cada arquivo de origem
Drenai

Respostas:


107

Atualizações

  • TypeScript 1.8+: "use strict";é emitido em módulos ( Leia mais ).
  • TypeScript 2.1+: a --alwaysStrictopção do compilador analisa todos os arquivos no modo estrito e emite "use strict"na parte superior de todos os arquivos emitidos ( Leia mais ).

Você pode encontrar uma lista de alguns exemplos pesquisando nos testes do TypeScript "no modo estrito".

Aqui estão alguns exemplos de código que lançam apenas um erro de tempo de compilação quando você "use strict";:

// future reserved keyword not allowed as variable name
var let,
    yield,
    public,
    private,
    protected,
    static,
    implements;

// "delete" cannot be called on an identifier
var a;
delete a;

// octal literals not allowed
03;

Existem mais alguns exemplos em "use strict";que lançaria um erro apenas em tempo de execução. Por exemplo:

"use strict";
delete Object.prototype;

Pessoalmente, não considero tudo isso útil para evitar que eu cometa erros no TypeScript e o ruído adicional que ele adiciona a um arquivo não me incomoda em escrevê-lo. Dito isto, a partir do TS 2.1, habilitarei a --alwaysStrictopção do compilador, pois adiciona um pouco de rigidez adicional sem nenhuma sobrecarga de manutenção de código.


É legal que os testes de unidade TypeScript cubram isso. Vou dar uma olhada. Obrigado pelos exemplos. E eu concordo em não incluí-lo mais em nossos "padrões de codificação" para TypeScript.
DeborahK

Observe que, se você usar módulos externos, qualquer use strictstring declarada na parte superior de um arquivo TS poderá aparecer na função module em vez de na parte superior do arquivo, alterando ligeiramente a semântica.
billc.cn

na minha máquina, texto datilografado 1.4 não permite que literais octais ao alvejar ECMAScript 5 ou superior, mesmo quando não estiver usando"use strict;"
Jeremy

18

Pelo meu dinheiro, sim , "use strict";deve ser incluído nos arquivos TypeScript.

Desconsiderando os efeitos do tempo de compilação"use strict"; no Typescript, é provável que haja um impacto no tempo de execução quando o javascript gerado for executado:

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.