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”?
"use strict";
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”?
"use strict";
Odpowiedzi:
Aktualizacje
"use strict";jest emitowany w modułach ( Czytaj więcej ).--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.
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ę.
"use strict;"
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:
MDN identyfikuje ulepszenia wydajności w unikaniu pudełkowania thisw wywołaniach funkcji oraz usuwaniu właściwości function.calleri function.arguments.
Jeff Walden z Mozilli również zasugerował możliwości poprawy wydajności w tej odpowiedzi .