Dev Study
← 解説「型述語 is — 自作の型ガード」に戻る

サンプルコードで身につける: 型述語 is — 自作の型ガード

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

1typeofの判定に名前を付ける

型述語の最も基本の形です。中身は typeof の判定そのものですが、戻り値の型を value is string と書くことで「true なら string」とコンパイラに伝わり、if 文の中で絞り込みが働きます。判定ロジックに名前が付くので、同じ判定を何度も書かずに済みます。

TypeScript

2filterでnullを取り除く

型述語が最も効く場面の1つが filter との組み合わせです。value !== null を返すだけの関数でも、型述語を付けて filter に渡すと結果の配列が string[] に絞り込まれ、以降は null の心配なく扱えます。未回答が混ざるアンケートやAPIの欠損データの整理で頻出します。

TypeScript

3inの判定を型述語関数にして使い回す

オブジェクト同士のユニオンは in 演算子で絞り込めますが、同じ in の条件をあちこちに書くと修正漏れのもとになります。型述語関数にまとめれば、判定方法を一箇所で管理しながら、呼んだ場所すべてで絞り込みが働きます。図形のように種類ごとの計算が分かれるデータで便利です。

TypeScript

4外部入力をリテラル型ユニオンに検証する

クエリパラメータやフォームの値はただの string で届くため、そのままではリテラル型の変数に代入できません。候補と一致するかを調べる型述語を通せば、検証済みの値だけが Priority 型として扱えます。「外から来た文字列を型の世界に入れる関所」として実務で多用される形です。

TypeScript

5unknownなJSONデータの形を検証する

JSON.parse の結果のような中身が保証できない値は unknown で受け、型述語で形を確かめてから使うのが安全な作法です。オブジェクトであること、必要なプロパティがあること、その型が合っていることまで調べて初めて User として扱えます。APIレスポンスの入力検証ガードそのものです。

TypeScript