basedmypy
basedmypy copied to clipboard
`callable` function is special-cased and doesn't narrow functions properly
from typing import Callable, cast, TypeGuard
# mypy: disallow-any-explicit=false
value: object
if callable(value):
cast(Callable[[], None], value) # error: non overlapping cast
# if we copy its signature from typeshed, it works:
def callable2(obj: object, /) -> TypeGuard[Callable[..., object]]: ... #type:ignore[empty-body]
if callable2(value):
cast(Callable[[], None], value) # no error