打字稿:是否可以创建指定长度的元组?

时间:2019-01-17 20:01:37

标签: typescript typescript-typings

它的工作方式应为:

type SpecifiedLengthTuple<T, L extends number> = ???

type tupleOfThreeStrings = SpecifiedLengthTuple<string, 3> // [string, string, string]

如果有人想知道,我希望它能解决以下问题:Typescript: increment number type

借助here中的TupleUnshift类型:

通过检查['length']得到的(未移位的)元组。

1 个答案:

答案 0 :(得分:1)

您必须使用元组PrependToTuple[...T]定义Item并返回[I, ...T]

type PrependTuple<A, T extends Array<any>> = 
  (((a: A, ...b: T) => void) extends (...a: infer I) => void ? I : [])

您可以使用递归调用,当length等于N时返回元组,如果不等于N则返回带前置项的累积元组

type SpecifiedLengthTuple<T, N extends number, L extends Array<any> = []> = {
  true: L;
  false: SpecifiedLengthTuple<T, N, PrependTuple<T, L>>;
}[L['length'] extends N ? "true" : "false"];

type Result = SpecifiedLengthTuple<boolean, 3>; // [boolean, boolean, boolean]

Playground