Closed
Description
This was reported by Alex Allain.
Mypy doesn't give an error for this program even though it should:
from typing import TypeVar, overload, List
T = TypeVar('T')
@overload
def f(x: T) -> List[T]: ...
@overload
def f(x: T, y: int) -> int: pass
def not_checked(text):
# type: (str) -> str
return f(*[]) # no error reported!
Mypy infers type List[None]
for []
(which is arguably okay, though a little confusing), and this results in all overload variants matching, which is again okay. Now since multiple overload variants match, mypy incorrectly gives up and infers Any
as the return type of f(*[])
, even though in this case we could infer a more precise type: a union of all return types of all overload variants, i.e. Union[List[None], int]
. Alternatively, mypy could give up and say that the return type is ambiguous, but it's less clear when this would be an okay thing to do (if ever).