typing_extensions
typing_extensions copied to clipboard
`TypeAliasType` when a ParamSpec should be replaced raised type error
TypeAliasType
currently has some bug/limitation when using it together with a ParamSpec
in Python <3.10.
Root of the problem is the changed typing._type_check
that was changed in Python 3.11 which makes typing_extensions.TypeAliasType.__getitem__
run into the TypeError in older Python versions:
arg: Ellipsis | list[type] # should be valid
- if not callable(arg):
- raise TypeError(f"{msg} Got {arg!r:.100}.")
+ if type(arg) is tuple:
+ raise TypeError(f"{msg} Got {arg!r:.100}.")
The following cases work in Python 3.11+ and fail in <= Python3.10
from typing_extensions import TypeAliasType, Callable, ParamSpec, Any
Foo = TypeAliasType("Foo", Callable[_PD, Any], type_params=(_PD,))
# Ok
FooInt = Foo[int] # (int) -> Any
# Error
FooInt2 = Foo[[int]] # (int) -> Any
# Error
FooIntInt = Foo[[int, int]] # (int, int) -> Any
# Error
FooWhatever = Foo[...] # (...) -> Any
# Error; should be invalid context
FooWhatever2 = Foo[[...]] # (...) -> Any
# Error
FooIntWhatever = Foo[[int, ...]] # (int, ...) -> Any
# ok, but invalid?; at least pylance reports wrong signature (Concatenate[int, ...]) -> Any
FooConcatIntWhatever = Foo[Concatenate[int, ...]]