ジェネリック型(Generics)は、TypeScriptや他のいくつかのプログラム言語で見られる機能で、コードの再利用性を高めるための非常に強力なツールです。
ジェネリック型とは
ジェネリック型を簡単に説明すると、型を「パラメータ」として関数やクラスに渡すことができる仕組みです。この「型のパラメータ」によって、一般的な関数やクラスを作成することができ、それを様々な型で再利用することができます。
例: ジェネリックを使用しない場合
function echoString(value: string): string {
return value;
}
function echoNumber(value: number): number {
return value;
}
上記のように、文字列や数字を返すための別々の関数を作成する必要があります。
例: ジェネリックを使用する場合
function echo<T>(value: T): T {
return value;
}
let str: string = echo<string>("hello");
let num: number = echo<number>(12345);
上記のecho関数は、という部分で型のパラメータを受け取ることができます。これにより、どんな型でもこの関数を使用することができるようになりました。
<> の中の T は、単に一つの「型変数」または「型パラメータ」として使用される文字です。T は>「Type」の略としてよく使用される名前ですが、必ずしも T である必要はありません。実際には、任意の名前を使って型変数を定義することができます。
ジェネリックの利点
- 再利用性: 一つのジェネリック関数やクラスを多くの型で再利用することができます。
- 型の安全性: 型の情報を保持しながら、動的に型を操作することができます。
- 柔軟性: 様々な型で動作するコードを書くことができますが、型の安全性も確保されます。
他のジェネリックの例
ジェネリックを持つ配列
let numbers: Array<number> = [1, 2, 3];
let strings: Array<string> = ["a", "b", "c"];
ジェネリッククラス
クラスでもジェネリック型を使用することができます。
class Box<T> {
private content: T;
constructor(content: T) {
this.content = content;
}
getContent(): T {
return this.content;
}
}
let numberBox: Box<number> = new Box(123);
let stringBox: Box<string> = new Box("hello");
このように、ジェネリック型はコードの再利用性を高めるための非常に強力なツールです。特に大きなプロジェクトやライブラリを作成する際には、この機能は非常に役立ちます。