File tree Expand file tree Collapse file tree 1 file changed +54
-0
lines changed
crates/ty_python_semantic/resources/mdtest Expand file tree Collapse file tree 1 file changed +54
-0
lines changed Original file line number Diff line number Diff line change 6363f(" foo" )
6464```
6565
66+ ## Multiple layers of union aliases
67+
68+ ``` py
69+ from typing import TypeAlias
70+
71+ class A : ...
72+ class B : ...
73+ class C : ...
74+ class D : ...
75+
76+ W: TypeAlias = A | B
77+ X: TypeAlias = C | D
78+ Y: TypeAlias = W | X
79+
80+ from ty_extensions import is_equivalent_to, static_assert
81+
82+ static_assert(is_equivalent_to(Y, A | B | C | D))
83+ ```
84+
6685## Cycles
6786
6887We also support cyclic type aliases:
@@ -125,6 +144,41 @@ class B(A[Alias]):
125144 pass
126145```
127146
147+ ### Mutually recursive
148+
149+ ``` py
150+ from typing import TypeAlias
151+
152+ A: TypeAlias = tuple[B] | None
153+ B: TypeAlias = tuple[A] | None
154+
155+ def f (x : A):
156+ if x is not None :
157+ reveal_type(x) # revealed: tuple[B]
158+ y = x[0 ]
159+ if y is not None :
160+ reveal_type(y) # revealed: tuple[A]
161+
162+ def g (x : A | B):
163+ reveal_type(x) # revealed: tuple[B] | None
164+
165+ from ty_extensions import Intersection
166+
167+ def h (x : Intersection[A, B]):
168+ reveal_type(x) # revealed: tuple[B] | None
169+ ```
170+
171+ ### Self-recursive callable type
172+
173+ ``` py
174+ from typing import Callable, TypeAlias
175+
176+ C: TypeAlias = Callable[[], C | None ]
177+
178+ def _ (x : C):
179+ reveal_type(x) # revealed: () -> C | None
180+ ```
181+
128182### Union inside generic
129183
130184#### With old-style union
You can’t perform that action at this time.
0 commit comments