mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
[3.12] Improve docs for typing.TypeAlias
(GH-105372) (#105446)
Improve docs for `typing.TypeAlias` (GH-105372)
(cherry picked from commit c5ec51ec8f
)
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
This commit is contained in:
parent
117c153d9f
commit
92ab560ef5
1 changed files with 26 additions and 4 deletions
|
@ -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]
|
||||
Factors: TypeAlias = list[int]
|
||||
|
||||
See :pep:`613` for more details about explicit type aliases.
|
||||
``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]"
|
||||
|
||||
class Box(Generic[T]):
|
||||
@classmethod
|
||||
def make_box_of_strings(cls) -> BoxOfStrings: ...
|
||||
|
||||
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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue