Since typing.Any matches literally anything, for @overload that start with special cases these are always picked in untyped code. Instead, @overload should prefer the most generic, conservative case.
This is related to and got my attention by the pandas concat type hints bug that causes Any -> ??? paths to select None -> Never overloads.
Minimal Reproducible Example
# Type test
# MyPy "correctly" reports the unused type ignore
async def test_filter_any(aitr: "AsyncIterator[int | None]") -> None:
filter_any: Any = ... # < we don't know the actual type and don't care
async for item in a.filter(filter_any, aitr):
print(2 + item) # type: ignore
Request Assignment [Optional]
[ ] I already understand the cause and want to submit a bugfix.
What happened?
Since
typing.Any
matches literally anything, for@overload
that start with special cases these are always picked in untyped code. Instead,@overload
should prefer the most generic, conservative case.This is related to and got my attention by the pandas concat type hints bug that causes
Any -> ???
paths to selectNone -> Never
overloads.Minimal Reproducible Example
Request Assignment [Optional]