Dev Study
← 解説「マップ型 — キーごとに型を作り変える」に戻る

サンプルコードで身につける: マップ型 — キーごとに型を作り変える

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

1全プロパティを boolean にする

マップ型の最も素朴な形です。[K in keyof Product] で Product のキーを1つずつたどり、値の型をすべて boolean にしています。元の型とキーがぴったり同じ別の型ができるので、キーの過不足はエラーになります。

TypeScript

2T[K] で値の型を保ったまま readonly を付ける

値の型に T[K](インデックスアクセス型)を書くと「元の値の型をそのまま使う」という意味になります。キーの前に readonly を付ければ、全プロパティが書き換え不可になった複製の型が作れます。元の型は一切変更しない、というのがマップ型の使い方です。

TypeScript

3? を付けて全プロパティを省略可能にする

キーの後ろに ? を付けると、全プロパティが省略可能な型になります。これは組み込みの Partial<T> の定義そのものです。「変更したい項目だけ渡す」更新関数が自然に書けるようになり、マップ型が日々の道具になる瞬間です。

TypeScript

4リテラル型のユニオンからキーを作る

in の右側は keyof でなくてもよく、リテラル型のユニオンを直接書けます。「候補の数だけキーを必ず持つ対応表」の型が作れて、キーが1つでも欠けるとエラーになります。候補のユニオンを型として既に持っているとき、その全候補ぶんの値を漏れなく用意させたい場面で使います。

TypeScript

5実務: フォームの型からエラー表示用の型を導出する

入力フォームの型から「項目ごとのエラーメッセージ(なければ null)」の型をマップ型で導出する実務例です。フォームに項目を追加すると FormErrors にも必須キーが自動で増え、エラー処理の書き忘れをコンパイラが教えてくれます。これがないと、フォームの型とエラーの型を手書きで二重管理し、項目の追加のたびに片方を直し忘れるバグが起きます。

TypeScript