TypeScriptには、配列(Array)とタプル(Tuple)という2つのデータ構造があります。一見似ていますが、使い方や特性が異なります。本記事では、それぞれの違いや活用方法について詳しく解説します。
[目次を開く]
1. 配列(Array)とは?
- 配列(Array)は、同じ型のデータを順番に格納できるリスト型のデータ構造です。TypeScriptでは、次のように記述します。
配列の基本的な型定義
let numbers: number[] = [1, 2, 3, 4, 5];
let strings: string[] = ["apple", "banana", "cherry"];
または、Array<T>
を使った記述も可能です。
let numbers: Array<number> = [1, 2, 3, 4, 5];
let strings: Array<string> = ["apple", "banana", "cherry"];
配列の特徴
- 要素数が可変(増減可能)
- 全ての要素が同じ型(
number[]
ならすべてnumber
型) - 要素の追加・削除が容易(
push()
やpop()
などが使用可能)
配列の操作例
let fruits: string[] = ["apple", "banana"];
fruits.push("cherry"); // ["apple", "banana", "cherry"]
fruits.pop(); // ["apple", "banana"]
2. タプル(Tuple)とは?
- タプル(Tuple)は、異なる型の値を順番に格納できるデータ構造です。配列とは異なり、事前に要素の型と順番を決めておく必要があります。
タプルの基本的な型定義
let user: [string, number] = ["Alice", 25];
この場合、
- 1つ目の要素は
string
型 - 2つ目の要素は
number
型
と決まっています。型が一致しない場合はエラーになります。
let invalidUser: [string, number] = [25, "Alice"]; // エラー!
タプルの特徴
- 異なる型を持つ要素を格納できる
- 要素の順番が固定(定義した順番でなければならない)
- 要素数が固定されることが多い(可変長タプルもあるが制約あり)
タプルの活用例
タプルは、関数の戻り値などで役立ちます。
function getUser(): [string, number] {
return ["Alice", 25];
}
let user = getUser();
console.log(user[0]); // "Alice"
console.log(user[1]); // 25
また、タプルを使うことで、オブジェクトを使わずに簡潔にデータを管理できます。
3. 配列とタプルの違い
特徴 | 配列(Array) | タプル(Tuple) |
---|---|---|
要素の型 | 同じ型 | 異なる型が可能 |
要素数 | 可変 | 基本的に固定 |
要素の順番 | 関係なし | 型と順番が固定 |
主な用途 | 一般的なリスト | 特定のフォーマットのデータ |
具体的な違いの例
// 配列
let arr: number[] = [1, 2, 3];
arr.push(4); // OK
arr[0] = 10; // OK
// タプル
let tuple: [string, number] = ["Alice", 25];
tuple[0] = "Bob"; // OK(同じ型なので)
tuple[1] = 30; // OK
tuple.push(40); // TypeScriptの制約を超えてしまうがエラーにならない場合あり
4. タプルと配列の使い分け
配列を使うべきケース
- 同じ型のデータをリストとして管理したい場合
- 要素の追加・削除を柔軟に行いたい場合
let numbers: number[] = [10, 20, 30]; // OK
numbers.push(40); // OK
タプルを使うべきケース
- 型の異なるデータを一つのまとまりとして管理したい場合
- データの順序を明確に固定したい場合
let person: [string, number] = ["Alice", 25]; // OK
特に関数の戻り値で、複数の異なる型のデータを返すときに便利です。
5. タプルの応用:可変長タプル
TypeScript 4.0以降では、可変長タプルがサポートされています。
let log: [string, ...number[]] = ["event", 1, 2, 3, 4];
この場合、最初の要素はstring
型で固定され、それ以降の要素はnumber
型の可変配列になります。
まとめ
TypeScriptの配列とタプルの違い
配列(Array) | タプル(Tuple) |
---|---|
同じ型の要素を格納 | 異なる型の要素を格納可能 |
要素数が可変 | 要素数が固定(可変長タプルを除く) |
要素の順番に制約なし | 要素の順番が決まっている |
タプルは型の異なるデータを順番通りに格納したい場合に便利です。一方で、配列は同じ型のデータを柔軟に扱いたいときに適しています。
場面に応じて使い分けることで、より安全で型の厳密なコードを記述できます。ぜひ、適切に活用してみてください!