Ce face noUncheckedIndexedAccess
Implicit, TypeScript presupune că note[0] dintr-un number[] este mereu un number, chiar dacă tabloul poate fi gol. La fel pentru obiectele cu chei oarecare (Record<string, number>): orice cheie pare să existe. Cu noUncheckedIndexedAccess, tipul devine number | undefined, deci trebuie să verifici înainte de folosire.
Proprietățile cunoscute (obj.nume) și buclele for...of nu sunt afectate: acolo valoarea există sigur. Tuplurile cu lungime fixă ([number, string]) nu primesc undefined la pozițiile lor.
Implicit este false și nu face parte din strict. tsc --init din 5.9 o pornește în fișierul nou.
Parametri
| Parametru | Descriere |
|---|---|
true |
Citirile prin index primesc | undefined. |
false |
Valoarea implicită. |
Exemple
Exemplul 1: Citiri prin index
note[0] și stoc["pere"] pot fi undefined. Bucla for...of nu dă eroare.
// tsconfig.json
{
"compilerOptions": {
"strict": true,
"noUncheckedIndexedAccess": true
}
}
// index.ts
const note: number[] = [9, 7, 10];
const prima = note[0];
console.log(prima.toFixed(1));
const stoc: Record<string, number> = { mere: 12 };
console.log(stoc["pere"] + 1);
for (const n of note) console.log(n.toFixed(1));
Rezultat (tsc 5.9)
$ npx tsc --noEmit
index.ts(3,13): error TS18048: 'prima' is possibly 'undefined'.
index.ts(6,13): error TS2532: Object is possibly 'undefined'.
Exemplul 2: Cod care tratează lipsa
La rulare, stoc["pere"] chiar este undefined, iar [][0] la fel. Codul de mai jos funcționează corect și cu opțiunea pornită.
const note: number[] = [];
const prima = note[0];
console.log("prima notă:", prima !== undefined ? prima.toFixed(1) : "nu există");
const stoc: Record<string, number> = { mere: 12 };
for (const fruct of ["mere", "pere"]) {
const bucati = stoc[fruct];
console.log(fruct, bucati === undefined ? "nu avem" : bucati + 1);
}
Rezultat
prima notă: nu există
mere 13
pere nu avem
Greșeli frecvente
- Să o pornești și să adaugi
!la fiecare index. Verifică o dată și folosește variabila restrânsă. - Să crezi că bucla clasică
for (let i = 0; i < a.length; i++)scapă de verificare.a[i]este totT | undefined; foloseștefor...ofsauentries().
Comenzi înrudite
strictNullChecks: Face din null și undefined tipuri separate: o valoare care poate lipsi trebuie verificată înainte de folosire.noPropertyAccessFromIndexSignature: Cheile care vin dintr-o semnătură de index ([cheie: string]) se citesc doar cu paranteze: s[„tema”], nu s.tema.exactOptionalPropertyTypes: O proprietate opțională (telefon?: string) poate lipsi, dar nu poate primi explicit valoarea undefined.