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