Skip to content

Commit de4a166

Browse files
committed
Add tests
1 parent fc15aa2 commit de4a166

5 files changed

+587
-0
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
tests/cases/compiler/checkOrderDependenceGenericAssignability.ts(21,1): error TS2322: Type 'Parent1<unknown>' is not assignable to type 'Parent1<string>'.
2+
Type 'unknown' is not assignable to type 'string'.
3+
tests/cases/compiler/checkOrderDependenceGenericAssignability.ts(45,1): error TS2322: Type 'Parent2<unknown>' is not assignable to type 'Parent2<string>'.
4+
Type 'unknown' is not assignable to type 'string'.
5+
tests/cases/compiler/checkOrderDependenceGenericAssignability.ts(62,1): error TS2322: Type 'Child3<unknown>' is not assignable to type 'Child3<string>'.
6+
Type 'unknown' is not assignable to type 'string'.
7+
tests/cases/compiler/checkOrderDependenceGenericAssignability.ts(68,1): error TS2322: Type 'Parent3<unknown>' is not assignable to type 'Parent3<string>'.
8+
Type 'unknown' is not assignable to type 'string'.
9+
10+
11+
==== tests/cases/compiler/checkOrderDependenceGenericAssignability.ts (4 errors) ====
12+
// Repro from #44572 with interface types
13+
14+
interface Parent1<A> {
15+
child: Child1<A>;
16+
parent: Parent1<A>;
17+
}
18+
19+
interface Child1<A, B = unknown> extends Parent1<A> {
20+
readonly a: A;
21+
readonly b: B;
22+
}
23+
24+
function fn1<A>(inp: Child1<A>) {
25+
const a: Child1<unknown> = inp;
26+
}
27+
28+
declare let pu1: Parent1<unknown>;
29+
declare let ps1: Parent1<string>;
30+
31+
pu1 = ps1; // Ok
32+
ps1 = pu1; // Error expected
33+
~~~
34+
!!! error TS2322: Type 'Parent1<unknown>' is not assignable to type 'Parent1<string>'.
35+
!!! error TS2322: Type 'unknown' is not assignable to type 'string'.
36+
37+
// Repro from #44572 with aliased object types
38+
39+
type Parent2<A> = {
40+
child: Child2<A>;
41+
parent: Parent2<A>;
42+
}
43+
44+
type Child2<A, B = unknown> = {
45+
child: Child2<A>;
46+
parent: Parent2<A>;
47+
readonly a: A;
48+
readonly b: B;
49+
}
50+
51+
function fn2<A>(inp: Child2<A>) {
52+
const a: Child2<unknown> = inp;
53+
}
54+
55+
declare let pu2: Parent2<unknown>;
56+
declare let ps2: Parent2<string>;
57+
58+
pu2 = ps2; // Ok
59+
ps2 = pu2; // Error expected
60+
~~~
61+
!!! error TS2322: Type 'Parent2<unknown>' is not assignable to type 'Parent2<string>'.
62+
!!! error TS2322: Type 'unknown' is not assignable to type 'string'.
63+
64+
// Simpler repro for same issue
65+
66+
interface Parent3<A> {
67+
child: Child3<A[]>;
68+
parent: Parent3<A>;
69+
}
70+
71+
interface Child3<A> extends Parent3<A> {
72+
readonly a: A;
73+
}
74+
75+
declare let cu3: Child3<unknown>;
76+
declare let cs3: Child3<string>;
77+
78+
cu3 = cs3; // Ok
79+
cs3 = cu3; // Error expected
80+
~~~
81+
!!! error TS2322: Type 'Child3<unknown>' is not assignable to type 'Child3<string>'.
82+
!!! error TS2322: Type 'unknown' is not assignable to type 'string'.
83+
84+
declare let pu3: Parent3<unknown>;
85+
declare let ps3: Parent3<string>;
86+
87+
pu3 = ps3; // Ok
88+
ps3 = pu3; // Error expected
89+
~~~
90+
!!! error TS2322: Type 'Parent3<unknown>' is not assignable to type 'Parent3<string>'.
91+
!!! error TS2322: Type 'unknown' is not assignable to type 'string'.
92+
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
//// [checkOrderDependenceGenericAssignability.ts]
2+
// Repro from #44572 with interface types
3+
4+
interface Parent1<A> {
5+
child: Child1<A>;
6+
parent: Parent1<A>;
7+
}
8+
9+
interface Child1<A, B = unknown> extends Parent1<A> {
10+
readonly a: A;
11+
readonly b: B;
12+
}
13+
14+
function fn1<A>(inp: Child1<A>) {
15+
const a: Child1<unknown> = inp;
16+
}
17+
18+
declare let pu1: Parent1<unknown>;
19+
declare let ps1: Parent1<string>;
20+
21+
pu1 = ps1; // Ok
22+
ps1 = pu1; // Error expected
23+
24+
// Repro from #44572 with aliased object types
25+
26+
type Parent2<A> = {
27+
child: Child2<A>;
28+
parent: Parent2<A>;
29+
}
30+
31+
type Child2<A, B = unknown> = {
32+
child: Child2<A>;
33+
parent: Parent2<A>;
34+
readonly a: A;
35+
readonly b: B;
36+
}
37+
38+
function fn2<A>(inp: Child2<A>) {
39+
const a: Child2<unknown> = inp;
40+
}
41+
42+
declare let pu2: Parent2<unknown>;
43+
declare let ps2: Parent2<string>;
44+
45+
pu2 = ps2; // Ok
46+
ps2 = pu2; // Error expected
47+
48+
// Simpler repro for same issue
49+
50+
interface Parent3<A> {
51+
child: Child3<A[]>;
52+
parent: Parent3<A>;
53+
}
54+
55+
interface Child3<A> extends Parent3<A> {
56+
readonly a: A;
57+
}
58+
59+
declare let cu3: Child3<unknown>;
60+
declare let cs3: Child3<string>;
61+
62+
cu3 = cs3; // Ok
63+
cs3 = cu3; // Error expected
64+
65+
declare let pu3: Parent3<unknown>;
66+
declare let ps3: Parent3<string>;
67+
68+
pu3 = ps3; // Ok
69+
ps3 = pu3; // Error expected
70+
71+
72+
//// [checkOrderDependenceGenericAssignability.js]
73+
"use strict";
74+
// Repro from #44572 with interface types
75+
function fn1(inp) {
76+
var a = inp;
77+
}
78+
pu1 = ps1; // Ok
79+
ps1 = pu1; // Error expected
80+
function fn2(inp) {
81+
var a = inp;
82+
}
83+
pu2 = ps2; // Ok
84+
ps2 = pu2; // Error expected
85+
cu3 = cs3; // Ok
86+
cs3 = cu3; // Error expected
87+
pu3 = ps3; // Ok
88+
ps3 = pu3; // Error expected
Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
=== tests/cases/compiler/checkOrderDependenceGenericAssignability.ts ===
2+
// Repro from #44572 with interface types
3+
4+
interface Parent1<A> {
5+
>Parent1 : Symbol(Parent1, Decl(checkOrderDependenceGenericAssignability.ts, 0, 0))
6+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 2, 18))
7+
8+
child: Child1<A>;
9+
>child : Symbol(Parent1.child, Decl(checkOrderDependenceGenericAssignability.ts, 2, 22))
10+
>Child1 : Symbol(Child1, Decl(checkOrderDependenceGenericAssignability.ts, 5, 1))
11+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 2, 18))
12+
13+
parent: Parent1<A>;
14+
>parent : Symbol(Parent1.parent, Decl(checkOrderDependenceGenericAssignability.ts, 3, 21))
15+
>Parent1 : Symbol(Parent1, Decl(checkOrderDependenceGenericAssignability.ts, 0, 0))
16+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 2, 18))
17+
}
18+
19+
interface Child1<A, B = unknown> extends Parent1<A> {
20+
>Child1 : Symbol(Child1, Decl(checkOrderDependenceGenericAssignability.ts, 5, 1))
21+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 7, 17))
22+
>B : Symbol(B, Decl(checkOrderDependenceGenericAssignability.ts, 7, 19))
23+
>Parent1 : Symbol(Parent1, Decl(checkOrderDependenceGenericAssignability.ts, 0, 0))
24+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 7, 17))
25+
26+
readonly a: A;
27+
>a : Symbol(Child1.a, Decl(checkOrderDependenceGenericAssignability.ts, 7, 53))
28+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 7, 17))
29+
30+
readonly b: B;
31+
>b : Symbol(Child1.b, Decl(checkOrderDependenceGenericAssignability.ts, 8, 18))
32+
>B : Symbol(B, Decl(checkOrderDependenceGenericAssignability.ts, 7, 19))
33+
}
34+
35+
function fn1<A>(inp: Child1<A>) {
36+
>fn1 : Symbol(fn1, Decl(checkOrderDependenceGenericAssignability.ts, 10, 1))
37+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 12, 13))
38+
>inp : Symbol(inp, Decl(checkOrderDependenceGenericAssignability.ts, 12, 16))
39+
>Child1 : Symbol(Child1, Decl(checkOrderDependenceGenericAssignability.ts, 5, 1))
40+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 12, 13))
41+
42+
const a: Child1<unknown> = inp;
43+
>a : Symbol(a, Decl(checkOrderDependenceGenericAssignability.ts, 13, 9))
44+
>Child1 : Symbol(Child1, Decl(checkOrderDependenceGenericAssignability.ts, 5, 1))
45+
>inp : Symbol(inp, Decl(checkOrderDependenceGenericAssignability.ts, 12, 16))
46+
}
47+
48+
declare let pu1: Parent1<unknown>;
49+
>pu1 : Symbol(pu1, Decl(checkOrderDependenceGenericAssignability.ts, 16, 11))
50+
>Parent1 : Symbol(Parent1, Decl(checkOrderDependenceGenericAssignability.ts, 0, 0))
51+
52+
declare let ps1: Parent1<string>;
53+
>ps1 : Symbol(ps1, Decl(checkOrderDependenceGenericAssignability.ts, 17, 11))
54+
>Parent1 : Symbol(Parent1, Decl(checkOrderDependenceGenericAssignability.ts, 0, 0))
55+
56+
pu1 = ps1; // Ok
57+
>pu1 : Symbol(pu1, Decl(checkOrderDependenceGenericAssignability.ts, 16, 11))
58+
>ps1 : Symbol(ps1, Decl(checkOrderDependenceGenericAssignability.ts, 17, 11))
59+
60+
ps1 = pu1; // Error expected
61+
>ps1 : Symbol(ps1, Decl(checkOrderDependenceGenericAssignability.ts, 17, 11))
62+
>pu1 : Symbol(pu1, Decl(checkOrderDependenceGenericAssignability.ts, 16, 11))
63+
64+
// Repro from #44572 with aliased object types
65+
66+
type Parent2<A> = {
67+
>Parent2 : Symbol(Parent2, Decl(checkOrderDependenceGenericAssignability.ts, 20, 10))
68+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 24, 13))
69+
70+
child: Child2<A>;
71+
>child : Symbol(child, Decl(checkOrderDependenceGenericAssignability.ts, 24, 19))
72+
>Child2 : Symbol(Child2, Decl(checkOrderDependenceGenericAssignability.ts, 27, 1))
73+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 24, 13))
74+
75+
parent: Parent2<A>;
76+
>parent : Symbol(parent, Decl(checkOrderDependenceGenericAssignability.ts, 25, 21))
77+
>Parent2 : Symbol(Parent2, Decl(checkOrderDependenceGenericAssignability.ts, 20, 10))
78+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 24, 13))
79+
}
80+
81+
type Child2<A, B = unknown> = {
82+
>Child2 : Symbol(Child2, Decl(checkOrderDependenceGenericAssignability.ts, 27, 1))
83+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 29, 12))
84+
>B : Symbol(B, Decl(checkOrderDependenceGenericAssignability.ts, 29, 14))
85+
86+
child: Child2<A>;
87+
>child : Symbol(child, Decl(checkOrderDependenceGenericAssignability.ts, 29, 31))
88+
>Child2 : Symbol(Child2, Decl(checkOrderDependenceGenericAssignability.ts, 27, 1))
89+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 29, 12))
90+
91+
parent: Parent2<A>;
92+
>parent : Symbol(parent, Decl(checkOrderDependenceGenericAssignability.ts, 30, 21))
93+
>Parent2 : Symbol(Parent2, Decl(checkOrderDependenceGenericAssignability.ts, 20, 10))
94+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 29, 12))
95+
96+
readonly a: A;
97+
>a : Symbol(a, Decl(checkOrderDependenceGenericAssignability.ts, 31, 23))
98+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 29, 12))
99+
100+
readonly b: B;
101+
>b : Symbol(b, Decl(checkOrderDependenceGenericAssignability.ts, 32, 18))
102+
>B : Symbol(B, Decl(checkOrderDependenceGenericAssignability.ts, 29, 14))
103+
}
104+
105+
function fn2<A>(inp: Child2<A>) {
106+
>fn2 : Symbol(fn2, Decl(checkOrderDependenceGenericAssignability.ts, 34, 1))
107+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 36, 13))
108+
>inp : Symbol(inp, Decl(checkOrderDependenceGenericAssignability.ts, 36, 16))
109+
>Child2 : Symbol(Child2, Decl(checkOrderDependenceGenericAssignability.ts, 27, 1))
110+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 36, 13))
111+
112+
const a: Child2<unknown> = inp;
113+
>a : Symbol(a, Decl(checkOrderDependenceGenericAssignability.ts, 37, 9))
114+
>Child2 : Symbol(Child2, Decl(checkOrderDependenceGenericAssignability.ts, 27, 1))
115+
>inp : Symbol(inp, Decl(checkOrderDependenceGenericAssignability.ts, 36, 16))
116+
}
117+
118+
declare let pu2: Parent2<unknown>;
119+
>pu2 : Symbol(pu2, Decl(checkOrderDependenceGenericAssignability.ts, 40, 11))
120+
>Parent2 : Symbol(Parent2, Decl(checkOrderDependenceGenericAssignability.ts, 20, 10))
121+
122+
declare let ps2: Parent2<string>;
123+
>ps2 : Symbol(ps2, Decl(checkOrderDependenceGenericAssignability.ts, 41, 11))
124+
>Parent2 : Symbol(Parent2, Decl(checkOrderDependenceGenericAssignability.ts, 20, 10))
125+
126+
pu2 = ps2; // Ok
127+
>pu2 : Symbol(pu2, Decl(checkOrderDependenceGenericAssignability.ts, 40, 11))
128+
>ps2 : Symbol(ps2, Decl(checkOrderDependenceGenericAssignability.ts, 41, 11))
129+
130+
ps2 = pu2; // Error expected
131+
>ps2 : Symbol(ps2, Decl(checkOrderDependenceGenericAssignability.ts, 41, 11))
132+
>pu2 : Symbol(pu2, Decl(checkOrderDependenceGenericAssignability.ts, 40, 11))
133+
134+
// Simpler repro for same issue
135+
136+
interface Parent3<A> {
137+
>Parent3 : Symbol(Parent3, Decl(checkOrderDependenceGenericAssignability.ts, 44, 10))
138+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 48, 18))
139+
140+
child: Child3<A[]>;
141+
>child : Symbol(Parent3.child, Decl(checkOrderDependenceGenericAssignability.ts, 48, 22))
142+
>Child3 : Symbol(Child3, Decl(checkOrderDependenceGenericAssignability.ts, 51, 1))
143+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 48, 18))
144+
145+
parent: Parent3<A>;
146+
>parent : Symbol(Parent3.parent, Decl(checkOrderDependenceGenericAssignability.ts, 49, 23))
147+
>Parent3 : Symbol(Parent3, Decl(checkOrderDependenceGenericAssignability.ts, 44, 10))
148+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 48, 18))
149+
}
150+
151+
interface Child3<A> extends Parent3<A> {
152+
>Child3 : Symbol(Child3, Decl(checkOrderDependenceGenericAssignability.ts, 51, 1))
153+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 53, 17))
154+
>Parent3 : Symbol(Parent3, Decl(checkOrderDependenceGenericAssignability.ts, 44, 10))
155+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 53, 17))
156+
157+
readonly a: A;
158+
>a : Symbol(Child3.a, Decl(checkOrderDependenceGenericAssignability.ts, 53, 40))
159+
>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 53, 17))
160+
}
161+
162+
declare let cu3: Child3<unknown>;
163+
>cu3 : Symbol(cu3, Decl(checkOrderDependenceGenericAssignability.ts, 57, 11))
164+
>Child3 : Symbol(Child3, Decl(checkOrderDependenceGenericAssignability.ts, 51, 1))
165+
166+
declare let cs3: Child3<string>;
167+
>cs3 : Symbol(cs3, Decl(checkOrderDependenceGenericAssignability.ts, 58, 11))
168+
>Child3 : Symbol(Child3, Decl(checkOrderDependenceGenericAssignability.ts, 51, 1))
169+
170+
cu3 = cs3; // Ok
171+
>cu3 : Symbol(cu3, Decl(checkOrderDependenceGenericAssignability.ts, 57, 11))
172+
>cs3 : Symbol(cs3, Decl(checkOrderDependenceGenericAssignability.ts, 58, 11))
173+
174+
cs3 = cu3; // Error expected
175+
>cs3 : Symbol(cs3, Decl(checkOrderDependenceGenericAssignability.ts, 58, 11))
176+
>cu3 : Symbol(cu3, Decl(checkOrderDependenceGenericAssignability.ts, 57, 11))
177+
178+
declare let pu3: Parent3<unknown>;
179+
>pu3 : Symbol(pu3, Decl(checkOrderDependenceGenericAssignability.ts, 63, 11))
180+
>Parent3 : Symbol(Parent3, Decl(checkOrderDependenceGenericAssignability.ts, 44, 10))
181+
182+
declare let ps3: Parent3<string>;
183+
>ps3 : Symbol(ps3, Decl(checkOrderDependenceGenericAssignability.ts, 64, 11))
184+
>Parent3 : Symbol(Parent3, Decl(checkOrderDependenceGenericAssignability.ts, 44, 10))
185+
186+
pu3 = ps3; // Ok
187+
>pu3 : Symbol(pu3, Decl(checkOrderDependenceGenericAssignability.ts, 63, 11))
188+
>ps3 : Symbol(ps3, Decl(checkOrderDependenceGenericAssignability.ts, 64, 11))
189+
190+
ps3 = pu3; // Error expected
191+
>ps3 : Symbol(ps3, Decl(checkOrderDependenceGenericAssignability.ts, 64, 11))
192+
>pu3 : Symbol(pu3, Decl(checkOrderDependenceGenericAssignability.ts, 63, 11))
193+

0 commit comments

Comments
 (0)