它的工作方式应为:
type SpecifiedLengthTuple<T, L extends number> = ???
type tupleOfThreeStrings = SpecifiedLengthTuple<string, 3> // [string, string, string]
如果有人想知道,我希望它能解决以下问题:Typescript: increment number type
借助here中的TupleUnshift
类型:
通过检查['length']
得到的(未移位的)元组。
答案 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]