"Usa rigoroso" necessario in un file TypeScript?


126

Ho visto post su dove inserire la riga "usa rigoroso" in un file di codice TypeScript. La mia domanda è: perché averlo?

Poiché TypeScript è già un linguaggio fortemente tipizzato, cosa aggiunge "usa rigoroso"?



12
Il collegamento fornito definisce a cosa serve "use strict" in un file JavaScript. La mia domanda è se sia ancora utile / necessario in un file TypeScript in cui gli editor abilitati per TypeScript e Typescript rileveranno la maggior parte / tutti (?) Dei problemi che "usare il rigoroso" potrebbe rilevare.
DeborahK,

Ne avresti bisogno anche se lo stai costruendo su ES6 e poi usando qualcosa come Babel, richiede che lo script generato contenga"use strict";
BrunoLM

Non inserirlo in TS archiviato, aggiungi il flag in tsconfig.json --alwaysStrict: Analizza in modalità rigorosa ed emetti "usa rigoroso" per ogni file sorgente
Drenai,

Risposte:


107

aggiornamenti

  • TypeScript 1.8+: "use strict";viene emesso in moduli (Altre informazioni ).
  • TypeScript 2.1+: l' --alwaysStrictopzione del compilatore analizza tutti i file in modalità rigorosa ed emette "use strict"nella parte superiore di tutti i file di output ( Leggi di più ).

Puoi trovare un elenco di alcuni esempi cercando i test di TypeScript per "in modalità rigorosa".

Ecco alcuni esempi di codice che genererà un errore di compilazione solo quando "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;

Ci sono alcuni altri esempi in cui "use strict";verrebbe generato un errore solo in fase di esecuzione. Per esempio:

"use strict";
delete Object.prototype;

Personalmente, non trovo tutto ciò molto utile per impedirmi di commettere errori in TypeScript e il rumore aggiuntivo che aggiunge a un file non mi disturba a scriverlo. Detto questo, a partire da TS 2.1 abiliterò l' --alwaysStrictopzione del compilatore perché aggiunge il leggero rigore aggiuntivo senza alcun sovraccarico di manutenzione del codice.


Bello che i test unitari di TypeScript coprano questo. Lo guarderò. Grazie per gli esempi E sono d'accordo sul non includerlo più nei nostri "standard di codifica" per TypeScript.
DeborahK,

Si noti che se si utilizzano moduli esterni, qualsiasi use strictstringa dichiarata nella parte superiore di un file TS può apparire all'interno della funzione del modulo anziché nella parte superiore del file, quindi alterare leggermente la semantica.
billc.cn,

sulla mia macchina, TypeScript 1.4 non consente i valori letterali ottali quando si prende di mira ECMAScript 5 o versioni successive, anche quando non si utilizza"use strict;"
Jeremy,

18

Per i miei soldi, , "use strict";dovrebbe essere incluso nei file TypeScript.

Ignorando gli effetti di compilazione di "use strict";su Typescript, è probabile che si verifichi un impatto di runtime quando viene eseguito il javascript generato:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.