Определение типа объекта: утка vs гусь

Для данного объединения проверяйте наличие числового weight. Структурная система типов не различает животных по имени типа, только по свойствам.

Короткий ответ

Что ответить на собеседовании

Для данного объединения проверяйте наличие числового 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'.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее