Напиши тип Middle Объединения и сужение обновлено

noUncheckedIndexedAccess и доступ по индексу

Вопрос

В tsconfig включён noUncheckedIndexedAccess. Какой тип у x? Впишите тип.

// tsconfig: "strict": true, "noUncheckedIndexedAccess": true
declare function loadNames(): string[];
const arr: string[] = loadNames();
const x = arr[0]; // x: /* ? */

Попробуйте сами

Напишите тип, как написали бы в коде.

Показать ответ и разбор

Коротко

Правильный тип: string | undefined. Без флага arr[0] имеет тип string, хотя массив может быть пустым, и это частая причина Cannot read properties of undefined в проде. noUncheckedIndexedAccess добавляет undefined к доступу по индексу массивов и индексных сигнатур…

Правильный тип

string | undefined

Разбор

Без флага arr[0] имеет тип string, хотя массив может быть пустым, и это частая причина Cannot read properties of undefined в проде. noUncheckedIndexedAccess добавляет | undefined к доступу по индексу массивов и индексных сигнатур (Record<string, T>). Флаг не входит в strict, его включают отдельно. Деструктуризация кортежей фиксированной длины и цикл for...of не страдают.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.