TypeScript では、要素数が限定された配列をタプルと呼ぶ。 タプル型には面白い特徴がある。
const foo = ["a", 1];
としたとき foo
の型は [string, number]
ではなく (string | number)[]
になる。したがって、次のコードは failTuple
の初期化時に型エラーになる。
const foo = ["a", 1]; // (string | number)[]
const failTuple: [string, number] = foo; // 型エラー!!
これを回避するための簡単な方法は、型を明示的に指定することである。具体的には次のようにする。
const bar: [string, number] = ["a", 1]; // [string, number]
const successTuple: [string, number] = bar;
as const
をつけて変数を初期化することもできる。次の例では bar
の型は readonly [string, number]
となり、タプルの中身は変更できない。
const bar: [string, number] = ["a", 1]; // readonly [string, number]
const successTuple: [string, number] = bar;
// successTuple[0] = "b"; // エラー!! (Cannot assign to '0' because it is a read-only property.)
付録として Playground で実験したときのコードスニペットをリンクしておく。