型ガード関数 (type guard function)
Type predicateの宣言は戻り値がboolean型の関数に対して適用でき、戻り値の型の部分を次のように書き替えます。
typescriptfunction isDuck(animal: Animal): animal is Duck {// ...}
typescriptfunction isDuck(animal: Animal): animal is Duck {// ...}
これで関数isDuck()がtrueを返す時のifのブロックの中ではanimalはDuck型として解釈されるようになります。
typescriptif (isDuck(animal)) {animal.quacks();// ...}
typescriptif (isDuck(animal)) {animal.quacks();// ...}
しかしながら、これはあくまでもその型であるとTypeScriptに解釈させるだけなので、JavaScriptとして正しいということは断言できません。
typescriptfunction isUndefined(value: unknown): value is undefined {return typeof value === "number";}
typescriptfunction isUndefined(value: unknown): value is undefined {return typeof value === "number";}
上記関数isUndefined()は明らかに誤っていますが、この誤りに対してTypeScriptは何も警告を出しません。