Ce face alwaysStrict
JavaScript are un „mod strict” care interzice câteva lucruri vechi și periculoase: variabile create fără declarare, cuvinte rezervate ca nume (interface, package, private…), with. Cu alwaysStrict, TypeScript verifică fiecare fișier după aceste reguli și adaugă "use strict"; la începutul fișierelor .js generate.
Fișierele cu import/export sunt module, iar modulele sunt deja în mod strict. Emise ca module ES, nu primesc directiva; emise ca CommonJS, o primesc oricum, cu sau fără opțiune. Efectul opțiunii la generare se vede deci la scripturile simple (fișiere fără import/export). Verificarea regulilor stricte se face însă în toate fișierele.
Implicit este false, dar devine true când strict este true. Nu are legătură cu verificările de tipuri din familia strict; se referă la modul strict al limbajului JavaScript.
Parametri
| Parametru | Descriere |
|---|---|
true |
Activează verificarea. |
false |
Dezactivează verificarea, chiar dacă "strict": true. |
(lipsă) |
Ia valoarea lui strict: activă dacă strict este true, altfel inactivă. |
Exemple
Exemplul 1: Ce se generează
Fișierul este un script (fără import/export). Cu alwaysStrict, primul rând din index.js este "use strict";; cu --alwaysStrict false, rândul lipsește.
// tsconfig.json
{
"compilerOptions": {
"alwaysStrict": true,
"target": "es2022"
}
}
// index.ts
let total = 10;
console.log(total);
Rezultat (tsc 5.9)
$ npx tsc && cat index.js
"use strict";
let total = 10;
console.log(total);
Exemplul 2: Cuvânt rezervat în modul strict
interface este cuvânt rezervat în modul strict, deci nu poate fi nume de variabilă.
// tsconfig.json
{
"compilerOptions": {
"alwaysStrict": true,
"target": "es2022"
}
}
// index.ts
let interface = 5;
console.log(interface);
Rezultat (tsc 5.9)
$ npx tsc --noEmit
index.ts(1,5): error TS1212: Identifier expected. 'interface' is a reserved word in strict mode.
index.ts(2,13): error TS1212: Identifier expected. 'interface' is a reserved word in strict mode.
Greșeli frecvente
- Să cauți
"use strict"într-un fișier ESM generat și să crezi că opțiunea nu merge. Modulele ES sunt strict automat, deci directiva nu e necesară. - Să confunzi
alwaysStrictcustrict. Prima privește regulile JavaScript; a doua pornește verificările de tipuri.
Comenzi înrudite
strict: Pornește dintr-o singură mișcare toate verificările stricte de tipuri (strictNullChecks, noImplicitAny și celelalte).noImplicitUseStrict: Opțiune scoasă care oprea scrierea lui „use strict” în fișierele generate.moduleDetection: Decide când un fișier este modul (cu scope propriu) și când este script global; force face din fiecare fișier un modul.target: Versiunea de JavaScript generată: sintaxa mai nouă decât ținta este transformată în cod echivalent mai vechi.