Closed
Description
This issue seems similar to #4619. My environment:
$ python --version
Python 3.6.5
$ mypy --version
mypy 0.620
Example file:
from random import random
from typing import Optional
from typing import overload
from typing import TypeVar
T = TypeVar("T")
@overload
def sometimes(o: T, o2: T) -> T:
pass
@overload
def sometimes(o: None, o2: T) -> Optional[T]:
pass
def sometimes(o: Optional[T], o2: T) -> Optional[T]:
if o is not None:
return o
return None if random() < 0.5 else o2
mypy
fails with:
$ mypy example.py
example.py:15: error: Overloaded function signature 2 will never be matched: signature 1's parameter type(s) are the same or broader
If I replace T
with an explicit type such as List[str]
--- example.py 2018-07-31 18:19:45.000000000 -0400
+++ example-explicit.py 2018-07-31 18:19:47.000000000 -0400
@@ -1,22 +1,20 @@
from random import random
+from typing import List
from typing import Optional
from typing import overload
-from typing import TypeVar
-
-T = TypeVar("T")
@overload
-def sometimes(o: T, o2: T) -> T:
+def sometimes(o: List[str], o2: List[str]) -> List[str]:
pass
@overload
-def sometimes(o: None, o2: T) -> Optional[T]:
+def sometimes(o: None, o2: List[str]) -> Optional[List[str]]:
pass
-def sometimes(o: Optional[T], o2: T) -> Optional[T]:
+def sometimes(o: Optional[List[str]], o2: List[str]) -> Optional[List[str]]:
if o is not None:
return o
then mypy
passes