alwaysStrict în TypeScript

Verifică fiecare fișier în modul strict al JavaScript și scrie "use strict" în fișierele .js generate.

Sintaxă
"compilerOptions": { "alwaysStrict": true }

tsc --alwaysStrict

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 alwaysStrict cu strict. 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.