Construct Tuple
介绍
实现MapTypes<T,R>
, 转换对象T中的类型为由R结构定义的不同类型
ts
type result = ConstructTuple<2> // 期望得到 [unknown, unkonwn]
View on GitHubts
type result = ConstructTuple<2> // 期望得到 [unknown, unkonwn]
起点
ts
/* _____________ Your Code Here _____________ */typeConstructTuple <L extends number> = any/* _____________ Test Cases _____________ */typecases = [Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.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>>,// @ts-expect-errorExpect <Equal <ConstructTuple <1000>['length'], 1000>>,]
take the challengets
/* _____________ Your Code Here _____________ */typeConstructTuple <L extends number> = any/* _____________ Test Cases _____________ */typecases = [Type 'false' does not satisfy the constraint 'true'.2344Type 'false' does not satisfy the constraint 'true'.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>>,// @ts-expect-errorExpect <Equal <ConstructTuple <1000>['length'], 1000>>,]
解决方案
Spoiler warning // Click to reveal answer
ts
typeConstructTuple <L extends number,R extends unknown[] = []> =R ['length'] extendsL ?R :ConstructTuple <L , [...R , unknown]>
ts
typeConstructTuple <L extends number,R extends unknown[] = []> =R ['length'] extendsL ?R :ConstructTuple <L , [...R , unknown]>