Skip to content

TypeAliasType when a ParamSpec should be replaced raised type error #448

Description

@Daraan

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

fromtyping_extensionsimportTypeAliasType, Callable, ParamSpec, AnyP=ParamSpec('P')
Foo=TypeAliasType("Foo", Callable[P, Any], type_params=(P,))
# OkFooInt=Foo[int] # (int) -> Any# ErrorFooInt2=Foo[[int]] # (int) -> Any# ErrorFooIntInt=Foo[[int, int]] # (int, int) -> Any# ErrorFooWhatever=Foo[...] # (...) -> Any# Error; should be invalid contextFooWhatever2=Foo[[...]] # (...) -> Any# Error; ( but also invalid parameter expression -> should use Concatenate)FooIntWhatever=Foo[[int, ...]] # (int, ...) -> Any# OK, correct parameter expressionFooConcatIntWhatever=Foo[Concatenate[int, ...]]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions