アサーション関数 (assertion functions)
やりたいことはほぼType predicateと同じです。Type predicateはboolean型の戻り値に対して使いましたがこちらは例外を投げるかどうかで判定します。上記関数isDuck()をAssertion functionsで書きかえると次のようになります。
typescriptfunction isDuck(animal: Animal): asserts animal is Duck {if (walksLikeDuck(animal)) {if (quacksLikeDuck(animal)) {return;}}throw new Error("YOU ARE A FROG!!!");}// ...isDuck(animal);animal.quacks();
typescriptfunction isDuck(animal: Animal): asserts animal is Duck {if (walksLikeDuck(animal)) {if (quacksLikeDuck(animal)) {return;}}throw new Error("YOU ARE A FROG!!!");}// ...isDuck(animal);animal.quacks();
こちらはこの関数が呼ばれた後であればいつでも変数animalはDuck型として解釈されます。