“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?

DeborahK
fonte
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.

David Sherret
fonte
É 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:

Jeremy
fonte