strict mode în TypeScript

Opțiunea strict pornește toate verificările stricte: null separat, fără any implicit, câmpuri inițializate și altele.

Sintaxă
// tsconfig.json
{ "compilerOptions": { "strict": true } }
// sau în linia de comandă
tsc --strict fisier.ts

Ce face strict mode

"strict": true în tsconfig.json (sau --strict) pornește un grup de verificări: strictNullChecks (null/undefined separate de celelalte tipuri), noImplicitAny (parametrii fără tip sunt eroare), strictPropertyInitialization (câmpurile claselor trebuie inițializate), strictFunctionTypes, strictBindCallApply, noImplicitThis, useUnknownInCatchVariables, alwaysStrict și strictBuiltinIteratorReturn. Fiecare are pagina ei în lista opțiunilor strict.

Proiectele noi create cu tsc --init au strict pornit, și așa ar trebui să rămână: fără el, TypeScript lasă să treacă exact erorile cele mai frecvente din JavaScript. Poți opri o singură verificare din grup, de exemplu "strict": true, "strictPropertyInitialization": false. Versiunile noi de TypeScript pot adăuga verificări noi în grup.

Toate exemplele din această secțiune sunt verificate cu --strict, plus noUnusedLocals și noUnusedParameters. Nu confunda cu "use strict" din JavaScript, care schimbă comportamentul la rulare; alwaysStrict îl adaugă automat în fișierele generate.

Exemple

Exemplul 1: Cod care trece fără strict, dar nu cu strict

Trei erori pe care --strict le prinde: un parametru fără tip, o valoare care poate fi undefined și un câmp neinițializat. Fără --strict, tsc nu raportează nimic, iar codul aruncă la rulare.

function dublu(x) {
    return x * 2;
}

const orase = ["Iași", "Cluj"];
const gasit = orase.find((o) => o.startsWith("B"));
console.log(gasit.length, dublu(2));

class Elev {
    nume: string;
}
console.log(new Elev());

Eroarea afișată de tsc

exemplu.mts(1,16): error TS7006: Parameter 'x' implicitly has an 'any' type.
exemplu.mts(7,13): error TS18048: 'gasit' is possibly 'undefined'.
exemplu.mts(10,5): error TS2564: Property 'nume' has no initializer and is not definitely assigned in the constructor.

Exemplul 2: Același cod, scris corect pentru strict

function dublu(x: number): number {
    return x * 2;
}

const orase = ["Iași", "Cluj"];
const gasit = orase.find((o) => o.startsWith("B"));
console.log(gasit?.length ?? 0, dublu(2));

class Elev {
    nume = "";
}
console.log(new Elev());

Rezultat

0 4
Elev { nume: '' }

Greșeli frecvente

  • Pornești un proiect fără strict și vrei să-l activezi mai târziu. Sute de erori apar deodată; pornește cu el activ de la început.
  • Oprești strict când apar erori. Ele arată probleme reale; repară-le una câte una.

Comenzi înrudite

  • strict: Pornește dintr-o singură mișcare toate verificările stricte de tipuri (strictNullChecks, noImplicitAny și celelalte).
  • strictNullChecks: Face din null și undefined tipuri separate: o valoare care poate lipsi trebuie verificată înainte de folosire.
  • noImplicitAny: Dă eroare când TypeScript nu poate deduce un tip și ar folosi în tăcere any (de obicei la parametrii fără tip).
  • null și undefined: Cu strictNullChecks, null și undefined sunt tipuri separate: o variabilă le acceptă doar dacă tipul ei le include.
  • any: Tipul care oprește verificarea: o valoare any acceptă orice și poate fi folosită oricum, fără erori de compilare.