logo
/
型ガード
型ガード(Type Guard)は、外部データなどの型を特定できないオブジェクトを扱う際に、ある程度の型安全で実行時チェックする仕組み。明示的に型を変換させる型キャスト(as)とは異なる
const isSong = (item: any): item is Song =>
item.type === 'song' && item.singer !== undefined;
このように、あるデータの型を確定する関数をType Guardと言い、x is TypeType Predicateと呼ぶ。 isSong(x)で条件判定されたオブジェクトは、TypeScriptはSong型であると見なして処理をする
逆に言うと、条件判定が偽である場合に型エラーを発生させることができる
プリミティブ型で使用するtypeof x == 'number'も型ガードである

型ガードが正しいか否かをTypescriptは判定できない

  • const isSong = (item: any): item is Song => true;のような型ガードを書いてもコンパイルは通る
  • 型の確定は結局手で書くこととなる

参考