Дано три новых типа. Нужно создать новый generic-тип, который будет содержать все поля этих типов (с использованием union).

Union A | B | C означает один из вариантов, а не объект со всеми полями. Для всех контрактов одновременно нужен intersection, при необходимости полученный из union.

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

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

Union A | B | C означает один из вариантов, а не объект со всеми полями. Для всех контрактов одновременно нужен intersection, при необходимости полученный из union.

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

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

Union A | B | C означает один из вариантов, а не объект со всеми полями. Для всех контрактов одновременно нужен intersection, при необходимости полученный из union.

type UnionToIntersection<U> =
  (U extends unknown ? (value: U) => void : never) extends
  (value: infer I) => void ? I : never;

type Combined<A, B, C> = UnionToIntersection<A | B | C>;

Условный тип распределяется по union, после чего вывод параметра объединяет требования. Это контракт пересечения: несовместимые типы одного свойства могут дать never. Если нужно сливать поля с union их значений, это другая задача и её правила следует уточнить.

Источник: www.typescriptlang.org.

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

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

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

Подробнее