Open
Description
Code:
I was trying to define a callable that can be async or not and use a TypeVar as the return type, but it seem to be broken, here's the full example:
from typing import Union, Awaitable, Callable, TypeVar, Any
T = TypeVar("T")
_RESOLVER_TYPE = Union[
Callable[..., T],
Callable[..., Awaitable[T]],
]
def x() -> int:
return 1
async def a_x() -> int:
return 1
def field_ok(
resolver: _RESOLVER_TYPE,
) -> Any:
...
def field_broken(
resolver: _RESOLVER_TYPE[T],
) -> Any:
...
field_ok(x)
field_ok(a_x)
field_broken(x)
field_broken(a_x)
if I don't pass T it seem to work, no sure what is wrong, the error is:
main.py:31: error: Argument 1 to "field_broken" has
incompatible type "Callable[[], Coroutine[Any, Any, int]]";
expected "Union[Callable[..., <nothing>], Callable[..., Awaitable[<nothing>]]]" [arg-type]
Here's the playground url: https://mypy-play.net/?mypy=latest&python=3.11&gist=6d8ed4a4e55e0d6b2712eff23cd3e3b0