跳到主要内容

Construct Tuple

介绍

实现MapTypes<T,R>, 转换对象T中的类型为由R结构定义的不同类型

ts
type result = ConstructTuple<2> // 期望得到 [unknown, unkonwn]
ts
type result = ConstructTuple<2> // 期望得到 [unknown, unkonwn]
View on GitHub

起点

ts
/* _____________ Your Code Here _____________ */
 
type ConstructTuple<L extends number> = any
 
/* _____________ Test Cases _____________ */
 
type cases = [
Expect<Equal<ConstructTuple<0>, []>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<ConstructTuple<2>, [unknown, unknown]>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<ConstructTuple<999>['length'], 999>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
// @ts-expect-error
Expect<Equal<ConstructTuple<1000>['length'], 1000>>,
]
ts
/* _____________ Your Code Here _____________ */
 
type ConstructTuple<L extends number> = any
 
/* _____________ Test Cases _____________ */
 
type cases = [
Expect<Equal<ConstructTuple<0>, []>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<ConstructTuple<2>, [unknown, unknown]>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
Expect<Equal<ConstructTuple<999>['length'], 999>>,
Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.
// @ts-expect-error
Expect<Equal<ConstructTuple<1000>['length'], 1000>>,
]
take the challenge

解决方案

Spoiler warning // Click to reveal answer
ts
type ConstructTuple<L extends number, R extends unknown[] = []> = R['length'] extends L
? R
: ConstructTuple<L, [...R, unknown]>
 
ts
type ConstructTuple<L extends number, R extends unknown[] = []> = R['length'] extends L
? R
: ConstructTuple<L, [...R, unknown]>
 
view more solutions