Typescript类型体操 - IsTuple

题目

中文

实现 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;

在线演示

posted @ 2022-10-23 21:58  Laggage  阅读(66)  评论(0)    收藏  举报