2015-07-13 12 views
79

Ho visto post su dove inserire la riga "use strict" in un file di codice TypeScript. La mia domanda è, perché mai?"Usa rigoroso" necessario in un file TypeScript?

Dal momento che TypeScript è già un linguaggio fortemente tipizzato, cosa aggiunge "use strict"?

+2

http://stackoverflow.com/questions/1335851/what-does-use-strict-do-in-javascript-and-what-is-the-reasoning-behind-it?rq=1 –

+9

Il link che hai fornito definisce cosa si intende per "usare rigorosamente" in un file JavaScript. La mia domanda è se sia o meno ancora utile/necessario in un file TypeScript in cui gli editor abilitati a TypeScript e Typescript cattureranno la maggior parte/tutti (?) Dei problemi che "use strict" potrebbe catturare. – DeborahK

+0

Anche se lo si sta costruendo in ES6 e si utilizza qualcosa come Babel, è necessario che lo script generato contenga "use strict"; ' – BrunoLM

risposta

61

Aggiornamenti

  • tipografico 1.8+: "use strict"; è emessa in moduli (Read more).
  • TypeScript 2.1+: --alwaysStrict l'opzione del compilatore analizza tutti i file in modalità rigorosa ed emette "use strict" nella parte superiore di tutti i file emessi (Read more).

È possibile trovare un elenco di alcuni esempi con la ricerca di prove di dattiloscritto per "in modalità rigorosa".

Ecco alcuni esempi di codice che gettano un errore di tempo di compilazione solo quando si "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 un paio di esempi in cui "use strict"; getterebbe un errore solo in fase di esecuzione. Per esempio:

"use strict"; 
delete Object.prototype; 

Personalmente, io non lo trovo tutto ciò che utile a mi impedisce di commettere errori a macchina e il rumore addizionale si aggiunge a un file mi fa non si preoccupano scriverlo. Detto questo, a partire da TS 2.1 abiliterò l'opzione del compilatore --alwaysStrict perché aggiunge la leggera rigidità aggiuntiva senza alcun sovraccarico di manutenzione del codice.

+0

È interessante notare che i test dell'unità TypeScript lo coprono. Lo guarderò. Grazie per gli esempi. E sono d'accordo sul fatto di non includerlo più nei nostri "standard di codifica" per TypeScript. – DeborahK

+0

Si noti che se si usano moduli esterni, qualsiasi stringa 'use strict' dichiarata nella parte superiore di un file TS può apparire nella funzione module invece che nella parte superiore del file, alterando leggermente la semantica. –

+0

sulla mia macchina, TypeScript 1.4 non consente letterali ottali durante il targeting di ECMAScript 5 o versioni successive, anche quando non si utilizza '" use strict; "' – Jeremy

9

Per i miei soldi, , "use strict"; devono essere inclusi nei file TypeScript.

Trascurando il tempo compilazione effetti della "use strict"; su tipografico, è probabile un runtime impatto quando viene eseguito il codice JavaScript generato:

  • MDN identifies performance improvements nell'evitare boxe this in chiamate di funzione, e la rimozione delle proprietà function.caller e function.arguments.

  • Jeff Walden di Mozilla ha anche accennato alle opportunità di guadagni in termini di prestazioni in this answer.