導入
「渡した値をそのまま返すだけの関数」を string 用・number 用と何個も書くのは無駄です。ジェネリクス(<T>)を使うと、型を1つの関数で使い回せます。
説明
<T> は「これから使う型に T という仮の名前を付ける」という意味です。引数や戻り値の型に T を使うと、呼び出し時に渡した値の型がそのまま反映されます。
function identity<T>(x: T): T {
return x;
}
console.log(identity<string>("hello")); // 型引数を明示
console.log(identity(42)); // 型引数は推論される(number)
配列の先頭要素を返す関数のように、実用的な場面でもよく使います。
function first<T>(arr: T[]): T {
return arr[0];
}
console.log(first([1, 2, 3])); // number として扱われる
console.log(first(["a", "b"])); // string として扱われる
T という名前は好きに変えられますが、慣習的に T(Type)が使われます。何を表す型かをわかりやすくしたいときは TItem のような名前にすることもあります。
やってみよう
first に数値の配列と文字列の配列をそれぞれ渡して、両方とも同じ関数で動くことを確認しましょう。
演習
配列の最後の要素を返す last<T>(arr: T[]): T という関数を作ってください。console.log(last([10, 20, 30])) で結果を表示してください。
ヒント1を見る
function last<T>(arr: T[]): T { return arr[arr.length - 1]; } と書きます。
ヒント2を見る
console.log(last([10, 20, 30])); です。