Dev Study
← 解説「ジェネリックな型定義」に戻る

サンプルコードで身につける: ジェネリックな型定義

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1中身だけ違う入れ物 Box<T>

型定義に型引数を持たせる最も素朴な形です。Box<number> と Box<string> は1つの定義から作られた別の型で、value の型だけが入れ替わることを確かめます。

TypeScript

2interface にも型引数を持たせる

型引数は type だけでなく interface でも使えます。固定のプロパティ(label)と型引数のプロパティ(value)を混ぜられること、ジェネリック関数の引数の型としても書けることを示します。

TypeScript

3一覧ページの共通構造 Paged<T>

「items の中身だけ違い、外側の構造は同じ」という API レスポンスの典型をジェネリックな型でまとめた例です。ユーザー一覧でも商品一覧でも Paged<T> の1定義を使い回せます。

TypeScript

4成功か失敗かを表す Result<T>

ジェネリックな型と判別可能ユニオンの組み合わせで、「成功なら T 型の値、失敗ならメッセージ」を1つの型で表します。例外を投げずに失敗を返す実務のエラーハンドリングで多用される形です。

TypeScript

5ジェネリック型を返すジェネリック関数

ジェネリックな型 CacheEntry<T> と、それを組み立てて返すジェネリック関数の連携です。保存した値の型が入れ物を経由しても失われない、キャッシュや履歴管理など実務のラッパー処理の基本形です。

TypeScript