Skip to content

Latest commit

 

History

History
34 lines (25 loc) · 1.11 KB

IsUnion.md

File metadata and controls

34 lines (25 loc) · 1.11 KB
标题 标签
IsUnion(是否是联合类型) extends(继承)

是否是联合类型。

  • 创建一个泛型 C 继承泛型 T,默认值也是 T。
  • 如果泛型 T 继承 T 并且泛型 C 也继承 T,则返回 true,如果泛型 T 继承 T,而泛型 C 不继承 T,则返回 unknown,都不满足则返回 never.
  • 返回值如果继承 true,则表示两个类型相同了,不可能是联合类型,因此返回 false,否则返回 true。

注: unknown 和任意类型取联合类型都是 unknown(any 除外)。 代码如下:

type IsUnion<T, C extends T = T> = (
  T extends T ? (C extends T ? true : unknown) : never
) extends true
  ? false
  : true;

使用方式:

type IsUnionCase1 = IsUnion<string>; // false
type IsUnionCase2 = IsUnion<string | number>; // true
type IsUnionCase3 = IsUnion<[string | number]>; // false

应用场景

如下所示,鼠标悬浮到对应的类型变量可以查看类型。