We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Never
TypeIs
playground
from typing import Any, Callable from typing_extensions import TypeIs, assert_type, assert_never def is_single_callable(c: Callable[[], Any] | Callable[[int], Any]) -> TypeIs[Callable[[int], Any]]: ... def test(c: Callable[[], Any] | Callable[[int], Any]): if is_single_callable(c): reveal_type(c) else: # mypy thinks this is unreachable a: int = 1
While c could be narrowed to Callable[[], Any] in the else block, it is currently narrowed to Never. For reference, see this discussion.
c
Callable[[], Any]
else
Your Environment
--warn-unreachable
The text was updated successfully, but these errors were encountered:
It turns out this affects any union of a generic type (not just Callable). For example:
def is_int_list(c: list[str] | list[int]) -> TypeIs[list[int]]: ... def foo(x: list[str] | list[int]) -> None: if is_int_list(x): reveal_type(x) # N: Revealed type is "builtins.list[builtins.int]" else: reveal_type(x) # E: Statement is unreachable reveal_type(x) # N: Revealed type is "builtins.list[builtins.int]"
Sorry, something went wrong.
Successfully merging a pull request may close this issue.
playground
While
c
could be narrowed toCallable[[], Any]
in theelse
block, it is currently narrowed toNever
. For reference, see this discussion.Your Environment
--warn-unreachable
The text was updated successfully, but these errors were encountered: