Skip to content

Latest commit

 

History

History
35 lines (26 loc) · 1.17 KB

IsTuple.md

File metadata and controls

35 lines (26 loc) · 1.17 KB
标题 标签
IsTuple(是否是元组) extends,array,tuple(继承,数组,元组)

是否是元组。

  • 元组中的元素如果是 never 类型,则不是元组,因此需要判断元素是否是 never,即T extends [never]
  • 元组的长度一定是一个具体的数值而不是 number 类型,因此需要判断长度是否是 number 类型,即number extends T['length']
  • 元组实际上就是特殊的数组,因此需要判断是否是一个任意值数组,注意也包含只读的数组,即T extends readonly any []

代码如下:

type isTuple<T> = T extends [never]
  ? false
  : T extends readonly any[]
  ? number extends T['length']
    ? false
    : true
  : false;

使用方式:

type case1 = IsTuple<[number]>; // true
type case2 = IsTuple<readonly [number]>; // true
type case3 = IsTuple<number[]>; // false

应用场景

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