«Use Strict» est-il nécessaire dans un fichier TypeScript?


126

J'ai vu des articles concernant l'emplacement de la ligne "use strict" dans un fichier de code TypeScript. Ma question est la suivante: pourquoi l'avoir?

Puisque TypeScript est déjà un langage fortement typé, qu'est-ce que "use strict" ajoute?



12
Le lien que vous avez fourni définit à quoi sert "use strict" dans un fichier JavaScript. Ma question est de savoir si oui ou non il est toujours utile / nécessaire dans un fichier TypeScript où les éditeurs TypeScript et Typescript captureront la plupart / tous (?) Des problèmes que "use strict" attraperait.
DeborahK

Vous en aurez également besoin si vous le construisez sur ES6 puis utilisez quelque chose comme Babel, il nécessite que le script généré contienne"use strict";
BrunoLM

Ne le mettez pas dans le fichier TS, ajoutez le drapeau dans tsconfig.json --alwaysStrict: Analyser en mode strict et émettre "use strict" pour chaque fichier source
Drenai

Réponses:


107

Mises à jour

  • TypeScript 1.8+: "use strict";est émis dans les modules ( Lire la suite ).
  • TypeScript 2.1+: l' --alwaysStrictoption du compilateur analyse tous les fichiers en mode strict et émet "use strict"en haut de tous les fichiers sortis ( En savoir plus ).

Vous pouvez trouver une liste d'exemples en recherchant les tests de TypeScript pour "en mode strict".

Voici quelques exemples de code qui ne lèveront une erreur de compilation que lorsque vous "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;

Il existe quelques autres exemples où "use strict";générerait une erreur uniquement lors de l'exécution. Par exemple:

"use strict";
delete Object.prototype;

Personnellement, je ne trouve pas cela très utile pour m'empêcher de faire des erreurs dans TypeScript et le bruit supplémentaire qu'il ajoute à un fichier ne me donne pas la peine de l'écrire. Cela dit, à partir de TS 2.1, j'activerai l' --alwaysStrictoption du compilateur car elle ajoute une légère rigueur supplémentaire sans aucune surcharge de maintenance du code.


Cool que les tests unitaires TypeScript couvrent cela. Je vérifierai. Merci pour les exemples. Et je suis d'accord pour ne plus l'inclure dans nos "standards de codage" pour TypeScript.
DeborahK

Notez que si vous utilisez des modules externes, toute use strictchaîne déclarée en haut d'un fichier TS peut apparaître dans la fonction module plutôt qu'en haut du fichier, modifiant ainsi légèrement la sémantique.
billc.cn

sur ma machine, TypeScript 1.4 n'autorise pas les littéraux octaux lors du ciblage d'ECMAScript 5 ou supérieur, même lorsque je ne l'utilise pas"use strict;"
Jeremy

18

Pour mon argent, oui , "use strict";devrait être inclus dans les fichiers TypeScript.

Indépendamment des effets de temps de compilation de "use strict";sur Typescript, il y a probablement un impact d' exécution lorsque le javascript généré est exécuté:

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.