summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorAlex Waygood <Alex.Waygood@Gmail.com>2023-06-07 13:31:02 (GMT)
committerGitHub <noreply@github.com>2023-06-07 13:31:02 (GMT)
commitc5ec51ec8f4508e1f01f6d98ac8364a13da9bec7 (patch)
tree1ace8b58a4e94fd2de83a379acaeb7b44fd945fc /Doc
parent7279fb64089abc73c03247fb8191082ee42a9671 (diff)
downloadcpython-c5ec51ec8f4508e1f01f6d98ac8364a13da9bec7.zip
cpython-c5ec51ec8f4508e1f01f6d98ac8364a13da9bec7.tar.gz
cpython-c5ec51ec8f4508e1f01f6d98ac8364a13da9bec7.tar.bz2
Improve docs for `typing.TypeAlias` (#105372)
Diffstat (limited to 'Doc')
-rw-r--r--Doc/library/typing.rst30
1 files changed, 26 insertions, 4 deletions
diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst
index f75fb48..50063d0 100644
--- a/Doc/library/typing.rst
+++ b/Doc/library/typing.rst
@@ -832,19 +832,41 @@ These can be used as types in annotations and do not support ``[]``.
.. data:: TypeAlias
Special annotation for explicitly declaring a :ref:`type alias <type-aliases>`.
+
For example::
- from typing import TypeAlias
+ from typing import TypeAlias
+
+ Factors: TypeAlias = list[int]
+
+ ``TypeAlias`` is particularly useful on older Python versions for annotating
+ aliases that make use of forward references, as it can be hard for type
+ checkers to distinguish these from normal variable assignments:
+
+ .. testcode::
+
+ from typing import Generic, TypeAlias, TypeVar
+
+ T = TypeVar("T")
+
+ # "Box" does not exist yet,
+ # so we have to use quotes for the forward reference on Python <3.12.
+ # Using ``TypeAlias`` tells the type checker that this is a type alias declaration,
+ # not a variable assignment to a string.
+ BoxOfStrings: TypeAlias = "Box[str]"
- Factors: TypeAlias = list[int]
+ class Box(Generic[T]):
+ @classmethod
+ def make_box_of_strings(cls) -> BoxOfStrings: ...
- See :pep:`613` for more details about explicit type aliases.
+ See :pep:`613` for more details.
.. versionadded:: 3.10
.. deprecated:: 3.12
:data:`TypeAlias` is deprecated in favor of the :keyword:`type` statement,
- which creates instances of :class:`TypeAliasType`.
+ which creates instances of :class:`TypeAliasType`
+ and which natively supports forward references.
Note that while :data:`TypeAlias` and :class:`TypeAliasType` serve
similar purposes and have similar names, they are distinct and the
latter is not the type of the former.