假设我有一个用
TypeVar
定义的类型,如下所示:
T = TypeVar('T')
MyType = Union[list[T], tuple[T]]
def func(a: MyType[int]):
pass
我也想要它的可选版本:
MyTypeOpt = Optional[MyType]
def opt_func(a: MyTypeOpt[int] = None):
pass
但这不符合 mypy 的喜好,我收到错误:
Bad number of arguments for type alias, expected: 0, given: 1 [type-arg]
。
有没有办法让它工作而不需要每次都写
Optional[MyType[...]]
?
我认为您缺少泛型类型的类型参数
MyType
。 mypy 也在抱怨这一点。
from typing import Optional, Sequence, Tuple, Union
from typing_extensions import TypeVar
T = TypeVar('T')
MyType = Union[Sequence[T], Tuple[T]]
MyTypeOpt = Optional[MyType[T]] # <---------
def func(a: MyType[int]) -> None:
pass
def opt_func(a: MyTypeOpt[int] = None) -> None:
pass
def opt_func2(a: Optional[MyType[int]] = None) -> None:
pass