Ce face strict
strict este comutatorul principal al verificărilor stricte. Cu "strict": true, TypeScript activează împreună: noImplicitAny, strictNullChecks, strictFunctionTypes, strictBindCallApply, strictPropertyInitialization, strictBuiltinIteratorReturn, noImplicitThis, useUnknownInCatchVariables și alwaysStrict. Fiecare are pagina ei.
Valoarea implicită este false, dar tsc --init scrie "strict": true în fișierul nou, iar pentru proiectele noi este alegerea recomandată. Poți opri o singură verificare din familie, de exemplu "strict": true, "strictNullChecks": false: opțiunea scrisă explicit câștigă.
Atenție: versiunile noi de TypeScript pot adăuga verificări noi în familia strict (așa a apărut strictBuiltinIteratorReturn în 5.6). După o actualizare pot apărea erori noi în cod care înainte trecea. Opțiunile din afara familiei (noUncheckedIndexedAccess, exactOptionalPropertyTypes, noUnusedLocals…) nu sunt pornite de strict.
Parametri
| Parametru | Descriere |
|---|---|
true |
Activează toate verificările din familia strict (cele care nu sunt setate explicit). |
false |
Valoarea implicită. Fiecare verificare din familie rămâne oprită, dacă nu o pornești separat. |
Exemple
Exemplul 1: Același cod, cu și fără strict
Fără strict, codul de mai jos trece de compilare, deși parametrii nu au tip și null este pus într-un string. Cu strict apar trei erori: două de la noImplicitAny și una de la strictNullChecks.
// tsconfig.json
{
"compilerOptions": {
"strict": true
}
}
// index.ts
function pret(produs, cantitate) {
return produs.pret * cantitate;
}
const oras: string = null;
console.log(pret({ pret: 12 }, 3), oras);
Rezultat (tsc 5.9)
$ npx tsc --noEmit
index.ts(1,15): error TS7006: Parameter 'produs' implicitly has an 'any' type.
index.ts(1,23): error TS7006: Parameter 'cantitate' implicitly has an 'any' type.
index.ts(5,7): error TS2322: Type 'null' is not assignable to type 'string'.
Exemplul 2: Ce pornește strict, văzut cu –showConfig
tsc --showConfig afișează configurația finală. Se vede că strict a pornit restul familiei, iar strictNullChecks, setat explicit pe false, a rămas oprit.
// tsconfig.json
{
"compilerOptions": {
"strict": true,
"strictNullChecks": false
}
}
Rezultat (tsc 5.9)
$ npx tsc --showConfig
{
"compilerOptions": {
"strict": true,
"strictNullChecks": false,
"noImplicitAny": true,
"noImplicitThis": true,
"strictFunctionTypes": true,
"strictBindCallApply": true,
"strictPropertyInitialization": true,
"strictBuiltinIteratorReturn": true,
"alwaysStrict": true,
"useUnknownInCatchVariables": true
},
"files": [
"./index.ts"
]
}
Exemplul 3: Cod scris pentru strict
Exemplele de pe acest site sunt verificate cu --strict. Codul are tipuri pentru parametri și tratează explicit cazul în care un produs nu este găsit.
interface Produs {
nume: string;
pret: number;
}
const produse: Produs[] = [
{ nume: "pâine", pret: 5 },
{ nume: "lapte", pret: 8 },
];
function cauta(nume: string): Produs | undefined {
return produse.find(p => p.nume === nume);
}
for (const nume of ["lapte", "cafea"]) {
const p = cauta(nume);
console.log(p ? `${p.nume}: ${p.pret} lei` : `${nume}: nu există`);
}
Rezultat
lapte: 8 lei
cafea: nu există
Greșeli frecvente
- Să crezi că
strictpornește tot.noUncheckedIndexedAccess,exactOptionalPropertyTypes,noImplicitReturnsșinoUnusedLocalstrebuie pornite separat. - Să activezi
strictîntr-un proiect mare dintr-odată. Pornește verificările pe rând (de obicei întâinoImplicitAny, apoistrictNullChecks) și repară erorile pas cu pas. - Să rulezi
tsc fisier.tsși să te aștepți să fie folosittsconfig.json. Când dai nume de fișiere în linia de comandă, tsc ignorătsconfig.jsonși folosește valorile implicite (deci fărăstrict).
Comenzi înrudite
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).noUncheckedIndexedAccess: Adaugă undefined la tipul valorilor citite cu index (note[0], stoc[„pere”]), pentru că ele pot lipsi.--showConfig: Afișează configurația finală (cu extends rezolvat și opțiunile deduse) și lista de fișiere, fără să compileze.--init: Creează un fișier tsconfig.json nou, cu setările recomandate de versiunea curentă de TypeScript.