本文へスキップ
BecomeCoder

TypeScriptコース · 第5章 ジェネリクス · レッスン16

ジェネリクス関数 ― 型を後から決める

ブラウザで完結

導入

「渡した値をそのまま返すだけの関数」を 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])); です。

実際に動かしてみよう

下のエディタにTypeScriptを書いて「実行」を押すと、その場でJavaScriptに変換してブラウザ内で実行し、出力が表示されます。本文の例をそのまま試したり、型注釈を書き換えたりしてみましょう(console.log の結果が下に出ます。初回だけコンパイラの読み込みに少し時間がかかります)。

TypeScript — ブラウザ内で実行

TypeScriptコンパイラ(同梱)でTS→JSに変換してから実行する学習用環境を読み込みます(初回のみコンパイラの読み込みに少し時間がかかります)。
スクロールして表示された時点でも自動で読み込まれます。