跳到主要内容

IsTuple

介绍

实现类型Zip<T, U>, T和U必须是元组.

ts
type case1 = IsTuple<[number]> // true
type case2 = IsTuple<readonly [number]> // true
type case3 = IsTuple<number[]> // false
ts
type case1 = IsTuple<[number]> // true
type case2 = IsTuple<readonly [number]> // true
type case3 = IsTuple<number[]> // false
View on GitHub

起点

ts
/* _____________ Your Code Here _____________ */
 
type IsTuple<T> = any
 
/* _____________ Test Cases _____________ */
 
type cases = [
Expect<Equal<IsTuple<[]>, true>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<IsTuple<[number]>, true>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<IsTuple<readonly [1]>, true>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<IsTuple<{ length: 1 }>, false>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<IsTuple<number[]>, false>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<IsTuple<never>, false>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
]
ts
/* _____________ Your Code Here _____________ */
 
type IsTuple<T> = any
 
/* _____________ Test Cases _____________ */
 
type cases = [
Expect<Equal<IsTuple<[]>, true>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<IsTuple<[number]>, true>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<IsTuple<readonly [1]>, true>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<IsTuple<{ length: 1 }>, false>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<IsTuple<number[]>, false>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<IsTuple<never>, false>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
]
take the challenge

解决方案

Spoiler warning // Click to reveal answer
ts
// most popular
 
/**
* 答案没有处理never的情况, 不过已经很完美了,稍加改动即可.
*/
 
type IsTuple<T> =T extends readonly any[]
? number extends T['length']?false:true
: false
 
 
type IsTuple2<T> = [T] extends [never]
? false
: T extends readonly any[]
? number extends T['length'] ? false : true
: false;
 
ts
// most popular
 
/**
* 答案没有处理never的情况, 不过已经很完美了,稍加改动即可.
*/
 
type IsTuple<T> =T extends readonly any[]
? number extends T['length']?false:true
: false
 
 
type IsTuple2<T> = [T] extends [never]
? false
: T extends readonly any[]
? number extends T['length'] ? false : true
: false;
 
view more solutions