4484 - IsTuple
实现一个类型 IsTuple,它接收一个输入类型 T 并返回 T 是否为元组类型。
例如:
type case1 = IsTuple<[number]> // true
type case2 = IsTuple<readonly [number]> // true
type case3 = IsTuple<number[]> // false
Solution
type IsTuple<T> = [T] extends [never]
? false
: T extends readonly any[]
? number extends T['length']
? false
: true
: false
首先判断泛型 T 是否是 never 类型, 如果是, 则返回 false。具体见 1042
接着判断 T 是否是数组类型(包括只读数组), 如果不是, 则返回 false
最后判断 T 的 length 属性, 如果 length 类型是 number, 表示 T 是一个可变长度的数组类型。直接返回 false
type ArrayLength = number[]['length'] // ArrayLength is number
type TupleLength = [number]['length'] // TupleLength is 1