4.4 ジェネリクス
ジェネリクス (generics) とは、型を変数(型引数)として扱うことで、特定の型に依存しない汎用的な関数を作る仕組みです。
4.4.1 関数の型引数とは
Section titled “4.4.1 関数の型引数とは”関数名のあとに <T> のような型引数リストを付けることで、関数内部でその型引数を使用できるようになります。
- 汎用性: 同じロジックで異なる型のデータを扱うことができます(例:引数をそのまま配列にして返す関数など)。
- 型安全性:
anyを使うのと異なり、渡された具体的な型情報を保持したまま処理を行うことができます。
4.4.2 関数の型引数を宣言する方法
Section titled “4.4.2 関数の型引数を宣言する方法”関数宣言、関数式、アロー関数のいずれでも型引数を宣言可能です。
- 関数宣言:
function repeat<T>(element: T, length: number): T[] { ... } - アロー関数:
const repeat = <T>(element: T, length: number): T[] => { ... } - メソッド記法: プロパティ名のあとに型引数を記述します。
4.4.3 関数の型引数は省略できる
Section titled “4.4.3 関数の型引数は省略できる”関数を呼び出す際、基本的には TypeScript が実引数から型引数の値を自動的に 推論 してくれます。
- 省略:
repeat("a", 5)と書けば、Tは自動的にstringと推論されます。 - 明示: 推論がうまくいかない場合や厳密に指定したい場合は、
repeat<string>("a", 5)のように明示することも可能です。
4.4.4 型引数を持つ関数型
Section titled “4.4.4 型引数を持つ関数型”型引数を持つ関数そのものも型として表現できます。
- 記法:
<T>(引数リスト) => 返り値の型 - 高度な推論: 複数の型引数がある場合でも、TypeScript はそれぞれの引数の使われ方から最適な型を導き出そうとします。