题目
中文
实现 IsTuple
类型, 接受一个泛型参数 T
作为输入, 并返回 T
是否为 tuple 类型
示例:
type case1 = IsTuple<[number]>; // true
type case2 = IsTuple<readonly [number]>; // true
type case3 = IsTuple<number[]>; // false
English
Implement a type IsTuple
, which takes an input type T
and returns whether T
is tuple type.
For example:
type case1 = IsTuple<[number]>; // true
type case2 = IsTuple<readonly [number]>; // true
type case3 = IsTuple<number[]>; // false
答案
/**
* 元组的长度是有限的,其`length`属性返回的是数字字面量;数组的`length`属性的类型是`number`
*/
type IsTuple<T> = [T] extends [never]
? false
: T extends readonly any[]
? number extends T['length']
? false
: true
: false;