实现一个类型 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