Skip to content

Commit fea8f12

Browse files
committed
add more tests
1 parent 50cb5e3 commit fea8f12

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

crates/ty_python_semantic/resources/mdtest/pep613_type_aliases.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,25 @@ f(1)
6363
f("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

6887
We 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

0 commit comments

Comments
 (0)