Я хотел бы объединить TypedDict
с Union
. Так что функция может вернуть либо A
, либо B
. Mypy может правильно определять тип возврата TypedDict
напрямую. Но когда TypedDict
вложено в Union
, оно не работает.
from typing_extensions import TypedDict
from typing import Union
class A(TypedDict):
a: str
class B(TypedDict):
b: str
def works() -> A:
return {'a': 'value'}
# Works as expected
def problem() -> Union[A, B]:
return {'a': 'value'}
# mypy_error: Incompatible return value type (got "Dict[str, str]", expected "Union[A, B]")
# Reports an error while it should be valid
def workaround() -> Union[A, B]:
x: A = {'a': 'value'}
return x
# This works again but is not very elegant
Возможный обходной путь - назначить временную возвращаемую подсказку типа (см. workaround()
). Есть ли более элегантный способ сделать это?
Примечание: Python 3.7