¿Se necesita "Usar estricto" en un archivo TypeScript?

126

He visto publicaciones sobre dónde colocar la línea de "uso estricto" en un archivo de código TypeScript. Mi pregunta es, ¿por qué tenerlo?

Dado que TypeScript ya es un lenguaje fuertemente tipado, ¿qué agrega "use estricto"?

DeborahK
fuente
12
El enlace que proporcionó define para qué sirve "uso estricto" en un archivo JavaScript. Mi pregunta es si todavía es útil / necesaria en un archivo TypeScript donde los editores habilitados para TypeScript y Typecript detectarán la mayoría / todos (?) De los problemas que "utilizarían estrictamente".
DeborahK
También lo necesitaría si lo está construyendo para ES6 y luego usa algo como Babel, requiere que contenga el script generado"use strict";
BrunoLM
No lo coloque en el archivo TS, agregue la bandera en tsconfig.json --alwaysStrict: Analice en modo estricto y emita "use estricto" para cada archivo fuente
Drenai

Respuestas:

107

Actualizaciones

  • TypeScript 1.8+: "use strict";se emite en módulos ( Leer más ).
  • TypeScript 2.1+: la --alwaysStrictopción del compilador analiza todos los archivos en modo estricto y emite "use strict"en la parte superior de todos los archivos de salida ( Leer más ).

Puede encontrar una lista de algunos ejemplos buscando en las pruebas de TypeScript "en modo estricto".

Aquí hay algunos ejemplos de código que solo arrojarán un error de tiempo de compilación cuando usted "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;

Hay algunos ejemplos más donde "use strict";arrojaría un error solo en tiempo de ejecución. Por ejemplo:

"use strict";
delete Object.prototype;

Personalmente, no me parece tan útil para evitar que cometa errores en TypeScript y el ruido adicional que agrega a un archivo hace que no me moleste en escribirlo. Dicho esto, a partir de TS 2.1, habilitaré la --alwaysStrictopción del compilador porque agrega una leve rigidez adicional sin ninguna sobrecarga de mantenimiento del código.

David Sherret
fuente
Es genial que las pruebas de la unidad TypeScript cubran esto. Lo comprobaré. Gracias por los ejemplos. Y estoy de acuerdo en no incluirlo más en nuestros "estándares de codificación" para TypeScript.
DeborahK
Tenga en cuenta que si usa módulos externos, cualquier use strictcadena declarada en la parte superior de un archivo TS puede aparecer en la función del módulo en lugar de en la parte superior del archivo, por lo tanto, altere ligeramente la semántica.
billc.cn
en mi máquina, TypeScript 1.4 no permite literales octales cuando se dirige a ECMAScript 5 o superior, incluso cuando no se usa"use strict;"
Jeremy
18

Por mi dinero, , "use strict";debería incluirse en los archivos TypeScript.

Sin tener en cuenta los efectos de tiempo de compilación de "use strict";Typecript, es probable que haya un impacto en tiempo de ejecución cuando se ejecuta el JavaScript generado:

  • MDN identifica mejoras de rendimiento para evitar el boxeo thisen las llamadas a funciones y la eliminación de las propiedades function.callery function.arguments.

  • Jeff Walden, de Mozilla, también ha insinuado oportunidades para aumentar el rendimiento en esta respuesta .

Jeremy
fuente