为什么 [U] [T]
换个位置,下面的结果就是不同了呢
type case1 = IsUnion<string> // false
type case2 = IsUnion<string | number> // true
type case3 = IsUnion<[string | number]> // false
type IsUnion<T, U = T> = T extends U ? ([U] extends [T] ? false : true) : never
type IsUnion2<T, U = T> = T extends U ? ([T] extends [U] ? false : true) : never