関数の戻り値に指定することで、引数の型を[[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)]]
- 📜**アクティビティ**
- 📝**トラブルシューティング**