MENU

TypeScriptの配列完全ガイド:基本から応用まで

目次

はじめに

プログラミングにおいて、配列は最も基本的かつ重要なデータ構造の一つです。TypeScriptでは、JavaScriptの配列の機能を全て利用できるだけでなく、静的型付けによる追加の安全性と開発者体験の向上を提供します。この記事では、TypeScriptにおける配列の基本的な使い方から高度なテクニックまでを詳しく解説します。

TypeScriptでの配列の基本

TypeScriptでは、配列を宣言する際に要素の型を指定することができます。これにより、配列に格納される要素の型を制限し、型の安全性を確保できます。

配列の宣言と初期化

TypeScriptで配列を宣言する方法はいくつかあります:

// 方法1: 型注釈を使用
let numbers: number[] = [1, 2, 3, 4, 5];

// 方法2: ジェネリック型を使用
let fruits: Array<string> = ['apple', 'banana', 'orange'];

// 方法3: 型推論を利用
let colors = ['red', 'green', 'blue']; // string[]と推論される

配列の操作

TypeScriptでの配列操作は、JavaScriptと同じように行えます:

let animals: string[] = ['dog', 'cat', 'bird'];

// 要素の追加
animals.push('fish');

// 要素の取得
console.log(animals[0]); // 出力: dog

// 配列の長さ
console.log(animals.length); // 出力: 4

// 配列のループ処理
animals.forEach(animal => {
    console.log(animal);
});

// 出力:
// dog
// cat
// bird
// fish

高度な配列の使い方

多次元配列

TypeScriptでは多次元配列も簡単に定義できます:

let matrix: number[][] = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

console.log(matrix[1][1]); // 出力: 5

タプル型

タプル型を使用すると、異なる型の要素を持つ配列を定義できます:

let person: [string, number, boolean] = ['John', 30, true];

console.log(person[0]); // 出力: John
console.log(person[1]); // 出力: 30

読み取り専用配列

readonly キーワードを使用して、変更不可能な配列を定義できます:

let readOnlyNumbers: readonly number[] = [1, 2, 3, 4, 5];

// 以下はコンパイルエラーになります
// readOnlyNumbers.push(6);
// readOnlyNumbers[0] = 10;

配列のメソッドとTypeScript

TypeScriptでは、JavaScriptの配列メソッドをより型安全に使用できます。

map, filter, reduce

これらの高階関数は、TypeScriptで特に有用です:

let numbers: number[] = [1, 2, 3, 4, 5];

// map: 各要素を2倍にする
let doubled = numbers.map(num => num * 2);
console.log(doubled); // 出力: [2, 4, 6, 8, 10]

// filter: 偶数のみを抽出
let evens = numbers.filter(num => num % 2 === 0);
console.log(evens); // 出力: [2, 4]

// reduce: 合計を計算
let sum = numbers.reduce((acc, cur) => acc + cur, 0);
console.log(sum); // 出力: 15

find と findIndex

特定の条件に合う要素やそのインデックスを見つけるのに便利です:

interface User {
    id: number;
    name: string;
}

let users: User[] = [
    { id: 1, name: 'Alice' },
    { id: 2, name: 'Bob' },
    { id: 3, name: 'Charlie' }
];

let bob = users.find(user => user.name === 'Bob');
console.log(bob); // 出力: { id: 2, name: 'Bob' }

let charlieIndex = users.findIndex(user => user.name === 'Charlie');
console.log(charlieIndex); // 出力: 2

TypeScriptの型と配列

TypeScriptの型システムを活用することで、より堅牢な配列の使用が可能になります。

ユニオン型の配列

異なる型の要素を含む配列を定義できます:

let mixedArray: (number | string)[] = [1, 'two', 3, 'four'];

インターフェースと配列

インターフェースを使用して、オブジェクトの配列を型安全に扱えます:

interface Product {
    id: number;
    name: string;
    price: number;
}

let inventory: Product[] = [
    { id: 1, name: 'Laptop', price: 1000 },
    { id: 2, name: 'Mouse', price: 20 },
    { id: 3, name: 'Keyboard', price: 50 }
];

// 価格でソート
inventory.sort((a, b) => a.price - b.price);

ジェネリクス関数と配列

ジェネリクスを使用して、型安全で再利用可能な関数を作成できます:

function firstElement<T>(arr: T[]): T | undefined {
    return arr[0];
}

console.log(firstElement([1, 2, 3])); // 出力: 1
console.log(firstElement(['a', 'b', 'c'])); // 出力: a

パフォーマンスと大規模配列

大規模な配列を扱う際は、パフォーマンスを考慮することが重要です。

配列の長さを事前に確保

大量の要素を追加する予定がある場合、配列の長さを事前に設定することでパフォーマンスを向上させることができます:

let largeArray: number[] = new Array(10000);
console.log(largeArray.length); // 出力: 10000

スプレッド演算子の活用

スプレッド演算子を使用して、効率的に配列を結合したり、要素を追加したりできます:

let arr1 = [1, 2, 3];
let arr2 = [4, 5, 6];

let combined = [...arr1, ...arr2];
console.log(combined); // 出力: [1, 2, 3, 4, 5, 6]

let newArray = [...arr1, 7, 8, 9];
console.log(newArray); // 出力: [1, 2, 3, 7, 8, 9]

まとめ

TypeScriptの配列は、JavaScriptの配列の機能性と柔軟性に加えて、静的型付けによる安全性と開発者体験の向上を提供します。基本的な配列の操作から、高度な型の活用、パフォーマンスの最適化まで、TypeScriptの配列は幅広いシナリオで活用できます。

この記事で紹介した技術を活用することで、より堅牢で保守性の高いコードを書くことができるでしょう。TypeScriptの配列を使いこなすことは、効率的で型安全なプログラミングへの重要なステップとなります。

配列は日々のプログラミングで頻繁に使用される要素です。TypeScriptの機能を十分に活用して、より良いコードを書いていきましょう。継続的な学習と実践を通じて、TypeScriptの配列の扱いをマスターすることで、より効果的なプログラミングが可能になります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次