Union A | B | C означает один из вариантов, а не объект со всеми полями. Для всех контрактов одновременно нужен intersection, при необходимости полученный из union.
Дано три новых типа. Нужно создать новый generic-тип, который будет содержать все поля этих типов (с использованием 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.