diff --git a/stdlib/typing.pyi b/stdlib/typing.pyi index 031acc7b950f..4811ceb3ef57 100644 --- a/stdlib/typing.pyi +++ b/stdlib/typing.pyi @@ -20,6 +20,11 @@ from types import ( ) from typing_extensions import Never as _Never, ParamSpec as _ParamSpec, final as _final +if sys.version_info >= (3, 10): + from types import UnionType +if sys.version_info >= (3, 9): + from types import GenericAlias + __all__ = [ "AbstractSet", "Any", @@ -745,9 +750,21 @@ else: ) -> dict[str, Any]: ... if sys.version_info >= (3, 8): - def get_origin(tp: Any) -> Any | None: ... def get_args(tp: Any) -> tuple[Any, ...]: ... + if sys.version_info >= (3, 10): + @overload + def get_origin(tp: ParamSpecArgs | ParamSpecKwargs) -> ParamSpec: ... + @overload + def get_origin(tp: UnionType) -> type[UnionType]: ... + if sys.version_info >= (3, 9): + @overload + def get_origin(tp: GenericAlias) -> type: ... + @overload + def get_origin(tp: Any) -> Any | None: ... + else: + def get_origin(tp: Any) -> Any | None: ... + @overload def cast(typ: Type[_T], val: Any) -> _T: ... @overload diff --git a/stdlib/typing_extensions.pyi b/stdlib/typing_extensions.pyi index 7fced5ecdeec..3233acc99f3e 100644 --- a/stdlib/typing_extensions.pyi +++ b/stdlib/typing_extensions.pyi @@ -32,6 +32,11 @@ from typing import ( # noqa: Y022,Y039 type_check_only, ) +if sys.version_info >= (3, 10): + from types import UnionType +if sys.version_info >= (3, 9): + from types import GenericAlias + __all__ = [ "Any", "ClassVar", @@ -155,6 +160,18 @@ def get_type_hints( include_extras: bool = False, ) -> dict[str, Any]: ... def get_args(tp: Any) -> tuple[Any, ...]: ... + +if sys.version_info >= (3, 10): + @overload + def get_origin(tp: UnionType) -> type[UnionType]: ... + +if sys.version_info >= (3, 9): + @overload + def get_origin(tp: GenericAlias) -> type: ... + +@overload +def get_origin(tp: ParamSpecArgs | ParamSpecKwargs) -> ParamSpec: ... +@overload def get_origin(tp: Any) -> Any | None: ... Annotated: _SpecialForm