はじめに
TypeScriptでは、配列の要素の型と数を厳密に定義することができる「タプル」型をサポートしています。タプルを使用することで、特定の数と順序の要素を持つ配列を定義できます。これにより、データの構造をより明確に表現し、型安全性を向上させることができます。
タプルとは
タプルは、特定の型と順序を持つ要素の集まりです。配列とは異なり、各要素の型を個別に指定できます。
タプルの定義
以下に、基本的なタプルの定義と使用例を示します。
// 文字列と数値のタプルを定義
let person: [string, number];
// 値を代入
person = ["Alice", 30]; // OK
// 不正な値を代入
person = [30, "Alice"]; // エラー: 型 'number' を型 'string' に割り当てることはできません。
person = ["Alice"]; // エラー: タプル型 '[string, number]' の長さに一致しません。
この例では、person
は [string, number]
型のタプルとして定義されています。したがって、最初の要素は文字列、2番目の要素は数値である必要があります。
タプルの利点
タプルを使用することで、以下の利点があります。
- 型安全性の向上:各要素の型が厳密に定義されているため、誤った型のデータが代入されることを防げる
- データ構造の明確化:データの構造が明確になるため、コードの可読性が向上する
- 静的検査:コンパイル時にエラーが検出されるため、バグの早期発見が可能
タプルの応用例
複数の戻り値を返す関数
タプルを使用して、複数の戻り値を返す関数を定義できます。
function getPersonInfo(): [string, number] {
return ["Bob", 25];
}
let [name, age] = getPersonInfo();
console.log(name); // "Bob"
console.log(age); // 25
複数の型を持つ配列
タプルを使用して、異なる型の要素を持つ配列を定義できます。
let data: [string, number, boolean] = ["Alice", 30, true];
console.log(data); // ["Alice", 30, true]
オプショナルな要素
タプルにはオプショナルな要素を含めることもできます。
let tuple: [string, number?];
tuple = ["Hello"]; // OK
tuple = ["Hello", 42]; // OK
tuple = [42]; // エラー: 型 'number' を型 'string' に割り当てることはできません。
名前付きタプル
TypeScript 4.0からは、タプルに名前を付けることができ、可読性がさらに向上します。
let person: [name: string, age: number] = ["Alice", 30];
let [name, age] = person;
console.log(name); // "Alice"
console.log(age); // 30
タプルと配列の違い
タプルと配列は似ていますが、いくつかの重要な違いがあります:
- 要素の型:配列ではすべての要素が同じ型である必要がありますが、タプルでは各要素の型を個別に指定できる
- 要素の数:配列の要素数は固定されていませんが、タプルの要素数は固定されている
- アクセスの安全性:タプルでは要素の型が保証されるため、安全にアクセスできる
まとめ
TypeScriptのタプルは、特定の型と順序を持つ要素の集まりを定義するための強力なツールです。タプルを使用することで、データの構造を明確に表現し、型安全性を向上させることができます。複数の戻り値を返す関数や異なる型の要素を持つ配列など、さまざまな場面でタプルを活用することができます。