Dev Study
← 解説「ジェネリック制約 extends」に戻る

サンプルコードで身につける: ジェネリック制約 extends

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

1length を持つ型だけ受け取る

制約の最も基本の形です。T extends { length: number } と書くと、文字列や配列のように length を持つ値だけが渡せるようになり、関数の中で安心して length を読めます。

TypeScript

2制約があるからプロパティに触れる

制約なしの T には何の操作もできませんが、title を持つと約束すれば中で title を読めます。さらに戻り値を T のままにすると、呼び出し側では渡したオブジェクト固有のプロパティも失われない点に注目してください。

TypeScript

3price を持つ配列の合計

「price さえあれば商品でも書籍でも合計できる」という、制約による柔軟さと安全さの両立を示す例です。実務では形の違うデータに共通処理をかけたい場面が多く、共通部分だけを制約に書くのが定石です。

TypeScript

4score を比較して高い方を返す

比較に使う score だけを制約で約束し、勝った方のオブジェクトを T のまま返す例です。引数の型を { score: number } と直接書くと他のプロパティの型情報が消えてしまうため、ジェネリクス + 制約が効いてきます。

TypeScript

5id で検索する汎用 findById

id を持つデータならユーザーでも商品でも検索できる、実務の定番ユーティリティです。見つからない可能性を T | undefined で表し、呼び出し側で undefined チェックをしてから固有のプロパティを使う流れまで含めた完成形です。

TypeScript