関数の戻り値に指定することで、引数の型を[[Narrowing]]できる型のこと。[[型ガード (TypeScript)|型ガード]]で使用する。 ```ts // 関連型定義(なんでもいい) interface Fish { swim(): void } interface Bird { fly(): void } // 返却型がType predicatesの関数 function isFish(pet: Fish | Bird): pet is Fish { return (pet as Fish).swim !== undefined; } // 利用例 declare let fishOrBird: Fish | Bird; if (isFish(fishOrBird)) { // ^? let fishOrBird: Fish | Bird fishOrBird // ^? let fishOrBird: Fish } else { fishOrBird // ^? let fishOrBird: Bird } ``` <button class="playground"><a href="https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgGLAM4AtkG8BQyyGA7sALYAUAlAFzIBuA9sACb4C++oksiKAIWBRWeQshgAbAJ416zNp3z4YAVxAIwwJiGSZ02SgAcIYegZwAfZEJF1kJsHoxpMOAkSinVUXcdPIcC4W1AB0pBTIAIQAvDHI6qwQMKAQrADcSvhJCJJwXsiSASnYAPJQtqzmbsjWlZnAMMiU+m6UJVjlldTUYkQA9P1EwyMAegD84h1dwuwDQxOcyBCSGCgeEm4zIuKDyIscQA">Playground</a></button> 関数 `function(x)` が以下2つの条件を満たすとき、`function(x): x is T` と表現できる。 1. もし関数が`true`を返却するなら、`x`は`T`型である 2. もし関数が`false`を返却するなら、`x`は`T`型ではない > [!info] > [[TypeScript 5.5]]から[[型述語 (TypeScript)|型述語]]も推論対象になった。 > > > [[TypeScript 5.5#Inferred Type Predicates]] ## MOC - 📒**関連** - [[型述語推論 (TypeScript)]] - 📜**アクティビティ** - 📝**トラブルシューティング**