Open3

JavaScript / TypeScript 学習メモ

shigeshige

ジェネリクス

ジェネリクスは、プログラミングにおいて「型を抽象化」する仕組み。

具体的な特徴と目的

  1. 型の柔軟性
    ジェネリクスを使うと、特定の型に依存しないコードを記述できます。たとえば、配列やリストの操作、データの変換など、どんな型に対しても同じロジックを適用できる場合に便利です。

  2. 型安全性
    型を抽象化しつつも、利用時には具体的な型を指定するため、コンパイル時に型チェックを行えます。これにより、ランタイムエラーを減らすことができます。

使用例

型パラメータ(<T>など)を用いて定義します。

配列の例

function identity<T>(value: T): T {
  return value;
}

const result1 = identity<string>("Hello"); // string型
const result2 = identity<number>(42);      // number型
  • Tは「型を抽象化するためのプレースホルダー」で、呼び出し時に具体的な型が渡されます。

クラスでの例

class Box<T> {
  private contents: T;
  
  constructor(contents: T) {
    this.contents = contents;
  }
  
  getContents(): T {
    return this.contents;
  }
}

const stringBox = new Box<string>("Book");
const numberBox = new Box<number>(100);

配列フィルターの汎用関数

function filterArray<T>(array: T[], predicate: (value: T) => boolean): T[] {
  return array.filter(predicate);
}

const numbers = [1, 2, 3, 4];
const evenNumbers = filterArray(numbers, (n) => n % 2 === 0); // [2, 4]

メリット

  • 再利用性: 同じロジックをさまざまな型に適用できる。
  • 型安全性: 型推論により誤った型の使用を防ぐ。
  • 可読性: 抽象化した型を明示することで、コードの意図が伝わりやすくなる。