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

DeborahK
la source
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.

David Sherret
la source
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é:

Jérémie
la source