Выбор ответа Junior Объединения и сужение спрашивают часто обновлено
Сужение по истинности и ноль
Вопрос
Что выведет fmt(0)?
function fmt(n: number | undefined) {
if (!n) return 'нет данных';
return n.toFixed(1);
}
console.log(fmt(0));
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 'нет данных'. Проверка !n убирает undefined, но ноль тоже ложное значение, поэтому fmt(0) уходит в ветку «нет данных».
Варианты ответа
'0.0''нет данных'правильный ответ- Ошибка компиляции:
nможет бытьundefined - TypeError в рантайме
Разбор
Проверка !n убирает undefined, но ноль тоже ложное значение, поэтому fmt(0) уходит в ветку «нет данных». Компилятор доволен: после проверки n сужен до number. Ошибка логическая, и типы её не ловят.
'0.0' было бы при проверке n === undefined. Ошибки компиляции нет, потому что сужение сработало. TypeError нет, потому что toFixed не вызывается.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Безопасный неизвестный тип
Следующий вопрос
Ответ API как union: loading, error, success