实现一个类型 IsUnion,它接受输入类型 T 并返回 T 是否解析为联合类型
例如:
type case1 = IsUnion<string> // false
type case2 = IsUnion<string | number> // true
type case3 = IsUnion<[string | number]> // false
// 答案 1
type IsUnion<T, Duplicate = T> = [T] extends [never]
? false
: T extends T // 触发分布式性
? [Duplicate] extends [T] ? false : true // T 是每一项,Duplicate 是原始联合类型
: never
// 答案 2
type IsUnion<T, Duplicate = T> = (T extends T ? Duplicate extends T ? true : unknown : never) extends true // 双重分发:将 T 的每一项与 Duplicate 的每一项判断
? false
: true
[[002.分布式条件类型|分布式条件类型]]