= U extends infer L | infer R ? L & R : U;
                  
                  
                  Не работает.
                  
                  
                  Работает только так:
                  
                  
                  type UnionToIntersection<U> = (U extends any ? (k: U) => void: never) extends (k: infer Q) => void ? Q : never;
                  
                  
                
Кстати вот почему это так работает 🤯
Для понимания, почему не работает первый вариант, предлагаю исследовать поведение следующих двух типов: type MaybeTakeUnionLeft<U> = U extends (infer L | infer R) ? L : never; type MaybeTakeUnionRight<U> = U extends (infer L | infer R) ? R : never;
да я понимаю, почему(интуитивно, объяснить не могу)
как раз читаю статью про тоже самое https://fettblog.eu/typescript-union-to-intersection/
Обсуждают сегодня