IT-Q

ジェネリクスは、どういうときに使いますか。

引数と戻り値の型の関係を保ったまま、いろいろな型で使える関数を作るときです。any と違って、呼ばれた型を戻り値まで運びます。extends で必要なプロパティを制約できます。

面接官が見ているのはany との違いを型の関係で説明できるか。

よくある答えと、面談でどう見られるか

  • 引数と戻り値の型の関係を保ったまま、いろいろな型で使える関数や型を作るとき
    その通りです。「受け取った型と同じ型を返す」のような関係を表せます。
  • 型が分からない引数を受けるとき。any と同じ
    any は型の情報を捨てますが、ジェネリクスは呼ばれた型を覚えて戻り値まで運びます。
  • 実行時に型によって処理を分けるとき
    型引数は実行時に消えます。型で処理を分けることはできません。
  • クラスでしか使えない
    関数、型エイリアス、interface でも使えます。

模範解答

「どんな型でも受け取れるが、受け取った型と戻り値の型には関係がある」ときに使います。

  function first<T>(items: T[]): T | undefined {
    return items[0]
  }

first([1, 2]) の戻り値は number | undefined、first(["a"]) なら string | undefined と、呼び出しごとに型が決まります。

引数を any[] にしても動きますが、戻り値が any になり、型の情報が失われます。ジェネリクスは型の情報を落とさずに運ぶための仕組みです。T extends { id: string } のように制約を付ければ、必要なプロパティがあることも保証できます。

対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。