Open
Description
Repro:
bug.py:
from __future__ import annotations
from typing import *
class B:
pass
class A:
name: Optional[Union[str, B]]
def foo(a: A):
if isinstance(a.name, str):
pass
elif isinstance(a.name, B):
pass
else:
raise AssertionError
bar(a.name)
def bar(arg: Union[str, B]):
pass
mypy incorrectly reports an error:
bug.py:22: error: Argument 1 to "bar" has incompatible type "object"; expected "Union[str, B]"
Interestingly, when a.name
is aliased with another name, the issue disappers, i.e. the following is checked without an issue:
ok.py:
from __future__ import annotations
from typing import *
class B:
pass
class A:
name: Optional[Union[str, B]]
def foo(a: A):
a_name = a.name
if isinstance(a_name, str):
pass
elif isinstance(a_name, B):
pass
else:
raise AssertionError
bar(a_name)
def bar(arg: Union[str, B]):
pass