May
25
0
Generics(ジェネリックス)

Generics(ジェネリックス)は、TypeScriptの機能の一つであり、汎用的な型を扱うための仕組みです。ジェネリックスを使用することで、特定の型に依存せずに、再利用可能なコンポーネントや関数を作成することができます。

ジェネリックスは、クラス、インターフェース、関数の定義に適用することができます。以下に、それぞれの場合でのジェネリックスの使用方法を説明します。

1. クラスのジェネリックス:
クラスの定義にジェネリックスを使用することで、クラス内で使用されるプロパティやメソッドの型を汎用化することができます。例えば、以下のようなジェネリックスを持つクラスを考えてみましょう。

 class ArrayWrapper<T> {
     private array: T[];

     constructor() {
       this.array = [];
     }

     push(item: T) {
       this.array.push(item);
     }

     pop(): T | undefined {
       return this.array.pop();
     }
   }

上記のクラスは、`ArrayWrapper`という汎用的なクラスを定義しています。`T`は型パラメータと呼ばれ、クラス内で使用される型を表します。例えば、`ArrayWrapper`という具体的な型引数を指定することで、`ArrayWrapper`クラスを数値の配列専用のクラスとして利用することができます。

2. インターフェースのジェネリックス:
インターフェースの定義にジェネリックスを使用することで、異なる型に対して共通の構造やメソッドを持つことができます。例えば、以下のようなジェネリックスを持つインターフェースを考えてみましょう。

   interface Pair<T, U> {
     first: T;
     second: U;
   }

上記のインターフェースは、`Pair`というジェネリックなペアを表すインターフェースです。`T`と`U`は型パラメータであり、`first`プロパティと`second`プロパティはそれぞれ異なる型を持つことができます。具体的な型引数を指定することで、異なる型のペアを表現することができます。

3. 関数のジェネリックス:
関数の定義にジェネリックスを使用することで、引数や戻り値の型

を汎用化することができます。以下に、ジェネリックスを持つ関数の例を示します。

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

上記の関数は、`identity`というジェネリックな関数です。`T`は型パラメータであり、引数`arg`と戻り値の型に同じ型を使用します。関数を呼び出す際に具体的な型引数を指定することで、異なる型の引数に対しても型安全な操作を行うことができます。

ジェネリックスを使用することで、型の再利用性や安全性を向上させることができます。ジェネリックスはTypeScriptにおける強力な機能の一つであり、広範な場面で活用されています。