TypeScript · Senior · Запитання 25 з 75
Як працює трюк UnionToIntersection?
type UnionToIntersection<U> =
(U extends any ? (x: U) => void : never) extends (x: infer I) => void
? I : never;- ✓Правильна відповідь: Виведення з контраваріантної позиції параметра об'єднує кандидатів у перетин
- 2Компілятор просто замінює
|на&за особливим правилом для цієї назви - 3Це не працює - перетин не можна отримати з union
Пояснення
Спершу union розподіляється в union функцій (x: A) => void | (x: B) => void. Потім під час виведення I з позиції параметра (контраваріантної) кілька кандидатів об'єднуються через перетин: A & B. Це хрестоматійний приклад type-level програмування.