Дана функция, которая возвращает объект вида { getNumby: number, createDub: number } или { getNumby: string, createDub: string }. Нужно написать TypeScript-тип, который подходит для обоих случаев (A и B), но не должен пропускать вариант, где поля имеют разные типы данных. Как бы вы это решили?

Используйте union двух целостных объектных типов, а не отдельный number | string у каждого поля. Так сохраняется связь между полями.

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

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

Используйте union двух целостных объектных типов, а не отдельный number | string у каждого поля. Так сохраняется связь между полями.

Подробный разбор

Ответ с пояснениями

Используйте union двух целостных объектных типов, а не отдельный number | string у каждого поля. Так сохраняется связь между полями.

type Result =
  | { getNumby: number; createDub: number }
  | { getNumby: string; createDub: string };

Объект с getNumby: 1 и createDub: 'x' не удовлетворяет ни одному варианту. Отдельные union-типы полей разрешили бы смешанное сочетание. Для удобного дальнейшего сужения сложных контрактов можно добавить discriminant, если публичная схема допускает его изменение; внешние данные всё равно валидируются во время выполнения.

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

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

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

Подробнее