IsTuple
介绍
实现类型Zip<T, U>
, T和U必须是元组.
ts
type case1 = IsTuple<[number]> // truetype case2 = IsTuple<readonly [number]> // truetype case3 = IsTuple<number[]> // false
View on GitHubts
type case1 = IsTuple<[number]> // truetype case2 = IsTuple<readonly [number]> // truetype case3 = IsTuple<number[]> // false
起点
ts
/* _____________ Your Code Here _____________ */typeIsTuple <T > = any/* _____________ Test Cases _____________ */typecases = [Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.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>>,]
take the challengets
/* _____________ Your Code Here _____________ */typeIsTuple <T > = any/* _____________ Test Cases _____________ */typecases = [Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.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>>,]
解决方案
Spoiler warning // Click to reveal answer
ts
// most popular/*** 答案没有处理never的情况, 不过已经很完美了,稍加改动即可.*/typeIsTuple <T > =T extends readonly any[]? number extendsT ['length']?false:true: falsetypeIsTuple2 <T > = [T ] extends [never]? false:T extends readonly any[]? number extendsT ['length'] ? false : true: false;
ts
// most popular/*** 答案没有处理never的情况, 不过已经很完美了,稍加改动即可.*/typeIsTuple <T > =T extends readonly any[]? number extendsT ['length']?false:true: falsetypeIsTuple2 <T > = [T ] extends [never]? false:T extends readonly any[]? number extendsT ['length'] ? false : true: false;