Bug Report
Example
from typing import TypeGuard, reveal_type
def is_int(obj: int | str) -> TypeGuard[int]:
return isinstance(obj, int)
def whats_this(obj: int | str) -> None:
if is_int(obj):
reveal_type(obj)
else:
reveal_type(obj)
whats_this(1) # Revealed type is "builtins.int"
whats_this("test") # Revealed type is "Union[builtins.int, builtins.str]"
Expected Behavior
whats_this("test") should reveal "builtins.str".
Note: This already works correctly for type narrowing expressions, i.e. when changing if is_int(obj) to if isinstance(obj, int).
Actual Behavior
The type in the else branch is not narrowed.
Your Environment
- Mypy version used: 1.15.0
- Python version used: 3.12