📌
指定した要素数を持つタプル型を生成する方法【TypeScript】
結論
type Tuple<Type, Length extends number> = ComputeTuple<Type, Length, []>;
type ComputeTuple<
Type,
Length extends number,
Tail extends Type[],
> = Tail['length'] extends Length
? Tail
: ComputeTuple<Type, Length, [Type, ...Tail]>;
const dummy: Tuple<number, 10> = ... // 省略
解説
要素数が0のタプルを用意して、目標の長さに到達するまで要素を追加していくという流れです。
ジェネリクス
名前 | 意味 |
---|---|
Type | タプルの要素の型 |
Length | 生成するタプルの長さ |
Tail | すでに生成したタプル。再帰する際に渡す |
フロー
終了条件はTail['length'] extends Length
の部分で判定しています。
これは、タプルのlengthプロパティ(長さ)が数値リテラル型で表現されることを利用して、目標の長さとタプルの長さを比較しています。
要素数の上限
単体での上限は999個でしたが、スプレッド演算子を使うことで、さらに拡張できます。[1]
-
この場合の上限は未確認です ↩︎
Discussion