Выбор ответа Junior Объединения и сужение обновлено
typeof object и null
Вопрос
Что скажет компилятор при strict: true?
function f(x: string[] | null) {
if (typeof x === 'object') {
console.log(x.length);
}
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибка: x possibly null. typeof null === 'object' в JavaScript, и TypeScript это знает: после проверки typeof x === 'object' тип x это string[] null.
Варианты ответа
- Внутри
ifуxтипnever - Ошибка:
typeofнельзя сравнивать с'object' - Всё компилируется:
xсужен доstring[] - Ошибка:
xpossiblynullправильный ответ
Разбор
typeof null === 'object' в JavaScript, и TypeScript это знает: после проверки typeof x === 'object' тип x это string[] | null. Обращение к length без проверки на null даёт ошибку. Правильно: if (x !== null) или if (Array.isArray(x)).
Сужения до string[] нет как раз из-за null. never получился бы, если бы ни один член объединения не подходил. Сравнивать typeof с 'object' можно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.