ソースコードの制御フローを分析し、[[型ガード (TypeScript)|型ガード]]や代入の結果と到達性を考慮して[[Narrowing]]すること。
```ts
function toString(numberOrString: number | string): string {
if (typeof numberOrString === "number") {
return String(numberOrString)
// ^? (parameter) numberOrString: number
}
return numberOrString
// ^? (parameter) numberOrString: string
}
```
<button class="playground"><a href="https://www.typescriptlang.org/play?#code/GYVwdgxgLglg9mABFOBlKAnGYDmAKMEAWwCMBTDAeQ3S1wC5FDSLEAfRAZ02xwEpG3OjkQBvAFCIpiGMER4oATwAOZOHObkqNHrkQBeQ4gBEmisb5jJ0mxjJQQGJLV4FiW6i9x9rNqQHp-P2CpAD0Afl9EAF9xKLsHJyZ3Ck9dHCjA4IjxaKA">Playground</a></button>