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