27862 - CartesianProduct
给定两个集合(并集),返回其笛卡尔积作为一个元组的集合
例如:
CartesianProduct<1 | 2, 'a' | 'b'>
// [1, 'a'] | [2, 'a'] | [1, 'b'] | [2, 'b']
Solution
type CartesianProduct<T, U> = T extends T
? U extends U
? [T, U]
: never
: never
extends
左侧是联合类型时, 会对联合类型的各个元素分别应用条件类型。
例如 T extends T
, 当 T
是 1 | 2
, 会分别执行
1 extends 1 | 2 ? T : never
2 extends 1 | 2 ? T : never
条件类型内部的 T
将变成联合类型中的单个元素, 而不是联合类型本身