Используйте union двух целостных объектных типов, а не отдельный number | string у каждого поля. Так сохраняется связь между полями.
Дана функция, которая возвращает объект вида { getNumby: number, createDub: number } или { getNumby: string, createDub: string }. Нужно написать TypeScript-тип, который подходит для обоих случаев (A и B), но не должен пропускать вариант, где поля имеют разные типы данных. Как бы вы это решили?
Используйте union двух целостных объектных типов, а не отдельный number | string у каждого поля. Так сохраняется связь между полями.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Используйте union двух целостных объектных типов, а не отдельный number | string у каждого поля. Так сохраняется связь между полями.
type Result =
| { getNumby: number; createDub: number }
| { getNumby: string; createDub: string };
Объект с getNumby: 1 и createDub: 'x' не удовлетворяет ни одному варианту. Отдельные union-типы полей разрешили бы смешанное сочетание. Для удобного дальнейшего сужения сложных контрактов можно добавить discriminant, если публичная схема допускает его изменение; внешние данные всё равно валидируются во время выполнения.