このように、あるデータの型を確定する関数をType Guardと言い、x is TypeはType Predicateと呼ぶ。isSong(x)で条件判定されたオブジェクトは、TypeScriptはSong型であると見なして処理をする
逆に言うと、条件判定が偽である場合に型エラーを発生させることができるプリミティブ型で使用するtypeof x == 'number'も型ガードである
型ガードが正しいか否かをTypescriptは判定できない
const isSong = (item: any): item is Song => true;のような型ガードを書いてもコンパイルは通る