"Use Strict" in einer TypeScript-Datei benötigt?

126

Ich habe Beiträge darüber gesehen, wo die Zeile "use strict" in eine TypeScript-Codedatei eingefügt werden soll. Meine Frage ist, warum überhaupt?

Was fügt "use strict" hinzu, da TypeScript bereits eine stark typisierte Sprache ist?

DeborahK
quelle
12
Der von Ihnen angegebene Link definiert, wofür "use strict" in einer JavaScript-Datei verwendet wird. Meine Frage ist, ob es in einer TypeScript-Datei, in der TypeScript- und Typescript-fähige Editoren die meisten / alle (?) Probleme abfangen, die "use strict" abfangen würde, noch nützlich ist / benötigt wird.
DeborahK
Sie würden es auch brauchen, wenn Sie es auf ES6 erstellen und dann etwas wie Babel verwenden. Es erfordert, dass das generierte Skript enthält"use strict";
BrunoLM
Legen Sie es nicht in die TS-Datei, fügen Sie das Flag in tsconfig.json hinzu - immerStrict: Analysieren Sie im strengen Modus und geben Sie "use strict" für jede Quelldatei aus
Drenai

Antworten:

107

Aktualisierung

  • TypeScript 1.8+: "use strict";wird in Modulen ausgegeben ( Lesen Sie mehr ).
  • TypeScript 2.1+: Die --alwaysStrictCompiler-Option analysiert alle Dateien im strengen Modus und gibt sie "use strict"oben in allen ausgegebenen Dateien aus ( Lesen Sie mehr ).

Eine Liste einiger Beispiele finden Sie, indem Sie in den TypeScript-Tests nach "im strengen Modus" suchen.

Hier sind einige Beispiele für Code, der nur dann einen Fehler bei der Kompilierung auslöst, wenn Sie "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;

Es gibt noch einige Beispiele, bei denen "use strict";nur zur Laufzeit ein Fehler ausgegeben wird. Beispielsweise:

"use strict";
delete Object.prototype;

Persönlich finde ich es nicht allzu nützlich, um zu verhindern, dass ich Fehler in TypeScript mache, und das zusätzliche Rauschen, das einer Datei hinzugefügt wird, macht mir keine Mühe, sie zu schreiben. Ab TS 2.1 werde ich jedoch die --alwaysStrictCompiler-Option aktivieren, da sie die geringfügige zusätzliche Strenge ohne zusätzlichen Aufwand für die Codewartung hinzufügt.

David Sherret
quelle
Cool, dass die TypeScript-Unit-Tests dies abdecken. Ich werde das überprüfen. Danke für die Beispiele. Und ich bin damit einverstanden, dass es nicht mehr in unsere "Codierungsstandards" für TypeScript aufgenommen wird.
DeborahK
Beachten Sie, dass bei Verwendung externer Module jede use strictZeichenfolge, die am Anfang einer TS-Datei deklariert ist, möglicherweise in der Modulfunktion statt am Anfang der Datei angezeigt wird. Ändern Sie daher die Semantik geringfügig.
billc.cn
Auf meinem Computer erlaubt TypeScript 1.4 keine oktalen Literale, wenn auf ECMAScript 5 oder höher abgezielt wird, auch wenn es nicht verwendet wird"use strict;"
Jeremy
18

Für mein Geld, ja , "use strict";sollte in Typoskript - Dateien enthalten sein.

Wenn die Auswirkungen der Kompilierungszeit"use strict"; auf Typescript nicht berücksichtigt werden, hat dies wahrscheinlich Auswirkungen auf die Laufzeit, wenn das generierte Javascript ausgeführt wird:

  • MDN identifiziert Leistungsverbesserungen beim Vermeiden von Boxen thisin Funktionsaufrufen und beim Entfernen der Eigenschaften function.callerund function.arguments.

  • Jeff Walden von Mozilla hat in dieser Antwort auch Möglichkeiten für Leistungssteigerungen angedeutet .

Jeremy
quelle