TypeScriptでは、配列をtype[]またはArray<type>の記法で要素の型を指定することにより、厳密に型付けすることができます。例えば:
let arr: number[] = [1, 2, 3];
タプルとは、固定長の配列であり、各要素の型を定義したものです:
let tuple: [string, number] = ["age", 30];
注意点:
pushは禁じられていませんが、結果は保証された型付けの範囲を超えることになります。TypeScriptのタプルは可変長の要素を含むことができ、型付けにどのように影響しますか?
回答: はい、タプルは...構文を使用して残りの要素を含めることができますが、残りの要素の型は依然として厳密に指定する必要があります:
let tuple: [string, ...number[]] = ["id", 10, 20, 30];
ただし、...より前の要素は必ず指定しなければならず、残りの配列の型は単一である必要があります。
物語
eコマースプロジェクトで、開発者はpushを使用してタプル[string, number]に二つ以上の要素を保存しようとしました。これはコンパイル時にエラーにならなかったが、正確に二つの要素を期待していた関数の動作を壊し、注文解析時のエラーを引き起こしました。
物語
関数はタプル[string, number]を返しましたが、消費者は文字列の配列を期待していました。型の不一致により、捕捉しにくいエラーが発生し、不正確な値が本番環境に送信されました。
物語
JavaScriptからTypeScriptへのコードの移行時に、異なる型の複数の値を返すために配列を使用しました。これが厳密な型付けを乱し、値の順序と型に依存していた後続のコードにバグを引き起こしました。