Wymagane jest ustawienie „Use Strict” w pliku TypeScript?


126

Widziałem posty dotyczące tego, gdzie umieścić wiersz „użyj ścisłego” w pliku kodu TypeScript. Moje pytanie brzmi: po co to w ogóle mieć?

Skoro TypeScript jest już językiem z silną typizacją, co dodaje „ścisłe”?



12
Podany przez Ciebie link określa, do czego służy „użyj ścisłego” w pliku JavaScript. Moje pytanie dotyczy tego, czy jest on nadal przydatny / potrzebny w pliku TypeScript, w którym edytory obsługujące język TypeScript i Typescript wychwycą większość / wszystkie (?) Problemy, które wyłapią „użyj ścisłego”.
— DeborahK

Będziesz go również potrzebował, jeśli "use strict";
— budujesz

Nie umieszczaj go w polu TS, dodaj flagę do tsconfig.json --alwaysStrict: Analizuj w trybie ścisłym i emituj „use strict” dla każdego pliku źródłowego
— Drenai

Odpowiedzi:


107

Aktualizacje

  • TypeScript 1.8+: "use strict";jest emitowany w modułach ( Czytaj więcej ).
  • TypeScript 2.1+: --alwaysStrictopcja kompilatora analizuje wszystkie pliki w trybie ścisłym i emituje "use strict"na górze wszystkich plików wyjściowych ( Czytaj więcej ).

Listę przykładów można znaleźć, wyszukując w testach TypeScript słowo „w trybie ścisłym”.

Oto kilka przykładów kodu, który zgłasza błąd czasu kompilacji tylko wtedy, gdy "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;

Istnieje kilka innych przykładów, w których "use strict";wystąpiłby błąd tylko w czasie wykonywania. Na przykład:

"use strict";
delete Object.prototype;

Osobiście uważam, że nie jest to przydatne w zapobieganiu popełnienia błędów w TypeScript, a dodatkowy szum, który dodaje do pliku, sprawia, że ​​nie zawracam sobie głowy pisaniem go. To powiedziawszy, począwszy od TS 2.1 --alwaysStrictwłączę opcję kompilatora, ponieważ dodaje ona niewielką dodatkową ścisłość bez narzutów związanych z konserwacją kodu.


Super, że testy jednostkowe TypeScript to obejmują. Sprawdzę to. Dzięki za przykłady. I zgadzam się, że nie włączam go już do naszych „standardów kodowania” dla języka TypeScript.
— DeborahK

Zauważ, że jeśli używasz modułów zewnętrznych, dowolny use strictciąg zadeklarowany na początku pliku TS może pojawić się wewnątrz funkcji modułu zamiast na górze pliku, co nieznacznie zmieni semantykę.
— billc.cn

na moim komputerze TypeScript 1.4 nie zezwala na literały ósemkowe podczas kierowania na ECMAScript 5 lub nowszy, nawet jeśli nie jest używany"use strict;"
— Jeremy

18

Za moje pieniądze, tak ,"use strict"; powinny być zawarte w plikach TypeScript.

Pomijając wpływ czasu kompilacji"use strict"; na Typescript, prawdopodobnie wystąpi wpływ na środowisko wykonawcze, gdy wygenerowany javascript zostanie wykonany:

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.