メインコンテンツまでスキップ

アサーション関数 (assertion functions)

やりたいことはほぼType predicateと同じです。Type predicateはboolean型の戻り値に対して使いましたがこちらは例外を投げるかどうかで判定します。上記関数isDuck()をAssertion functionsで書きかえると次のようになります。

typescript
function 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();
typescript
function 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();

こちらはこの関数が呼ばれた後であればいつでも変数animalDuck型として解釈されます。