Для данного объединения проверяйте наличие числового weight. Структурная система типов не различает животных по имени типа, только по свойствам.
Определение типа объекта: утка vs гусь
Для данного объединения проверяйте наличие числового weight. Структурная система типов не различает животных по имени типа, только по свойствам.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Нужно выяснить, как убедиться, что переменная bird относится к типу Duck, а не к типу Goose, используя проверку по структуре.
type Goose = {
bite: VoidFunction;
color: string;
};
type Duck = {
bite: VoidFunction;
weight: number;
};
const bird = Math.random() > 0.5
? { bite: () => console.log('аи!'), color: 'white' }
: { bite: () => {}, weight: 32 };
// Реализуйте проверку, что объект является именно уткой
``n
Ответ
Для данного объединения проверяйте наличие числового weight. Структурная система типов не различает животных по имени типа, только по свойствам.
function isDuck(value: Goose | Duck): value is Duck {
return 'weight' in value && typeof value.weight === 'number';
}
if (isDuck(bird)) console.log(bird.weight);
Проверка подходит указанному контракту, но объект может структурно содержать и color, и weight. Если нужна строгая взаимоисключающая разновидность, добавьте discriminator вроде kind: 'duck' | 'goose'.