📌

指定した要素数を持つタプル型を生成する方法【TypeScript】

2022/03/23に公開

結論

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]

脚注
  1. この場合の上限は未確認です ↩︎

Discussion