Выбор ответа Junior Объединения и сужение обновлено
Сужение типов без классов
Вопрос
Cat и Dog объявлены через type. Какая проверка сузит a до Cat?
type Cat = { meow(): void };
type Dog = { bark(): void };
function speak(a: Cat | Dog) {
if (/* ? */) a.meow();
else a.bark();
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 'meow' in a. Оператор in проверяет наличие свойства у объекта, и TypeScript сужает объединение до вариантов, где такое свойство есть. instanceof работает только с классами (значениями в рантайме), а Cat это тип, его нет в JS. typeof возвращает лишь…
Варианты ответа
a instanceof Cat'meow' in aправильный ответtypeof a === 'Cat'a as Cat
Разбор
Оператор in проверяет наличие свойства у объекта, и TypeScript сужает объединение до вариантов, где такое свойство есть.
instanceof работает только с классами (значениями в рантайме), а Cat это тип, его нет в JS. typeof возвращает лишь 'object', 'string' и подобные, имена типов он не знает. as не проверяет, а приказывает компилятору.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.