Как работает паттерн `UnionToIntersection` в TypeScript?
type UnionToIntersection<U> =
(U extends any ? (x: U) => void : never) extends
(x: infer I) => void ? I : never;
- Использует контравариантность параметров функций
- Дистрибутивно создаёт union функций:
((x: A) => void) | ((x: B) => void) inferв контравариантной позиции извлекает intersection:A & B- Применение: слияние типов, превращение union в объединённый объект