|
1 | 1 | === tests/cases/compiler/checkOrderDependenceGenericAssignability.ts ===
|
2 |
| -/* |
3 |
| - |
4 |
| -Debugging notes: variance measurement for `Parent` is getting set to |
5 |
| -`VarianceFlags.Independent`, implying that its type parameter is never |
6 |
| -witnessed at all. It arrived at this conclusion by checking the assignability |
7 |
| -of `Parent` instantiated with marker types. It first checks assignability in |
8 |
| -both directions with instantiations with super/sub-related marker types, and |
9 |
| -assignability appears to return true in both directions; however, it actually |
10 |
| -is returning `Ternary.Unknown`, due to being unable to answer questions about |
11 |
| -the assignability of the types' `parent` and `child` properties without knowing |
12 |
| -their variances. After (incorrectly) concluding that `Parent` is bivariant on `A`, |
13 |
| -it checks another set of instantiations with markers that are unrelated to each |
14 |
| -other. That too comes back as `Ternary.Unknown` but is interpreted as true, so |
15 |
| -the variance gets updated to `Independent`, since instantiating `Parent` with |
16 |
| -all kinds of different markers with different assignability to each other |
17 |
| -apparently had no effect on the instantiations' assignability to each other. |
18 |
| - |
19 |
| -I'm not sure if any of those comparisons ever actually looked at `a` and `b`, |
20 |
| -which should provide some non-recursive concrete variance information. I'm also |
21 |
| -not sure if `outofbandVarianceMarkerHandler` should have been called at some point, |
22 |
| -but it was not. |
23 |
| - |
24 |
| -*/ |
| 2 | +// #44572 |
25 | 3 |
|
26 | 4 | interface Parent<A> {
|
27 | 5 | >Parent : Symbol(Parent, Decl(checkOrderDependenceGenericAssignability.ts, 0, 0))
|
28 |
| ->A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 24, 17)) |
| 6 | +>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 2, 17)) |
29 | 7 |
|
30 | 8 | child: Child<A> | null;
|
31 |
| ->child : Symbol(Parent.child, Decl(checkOrderDependenceGenericAssignability.ts, 24, 21)) |
32 |
| ->Child : Symbol(Child, Decl(checkOrderDependenceGenericAssignability.ts, 27, 1)) |
33 |
| ->A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 24, 17)) |
| 9 | +>child : Symbol(Parent.child, Decl(checkOrderDependenceGenericAssignability.ts, 2, 21)) |
| 10 | +>Child : Symbol(Child, Decl(checkOrderDependenceGenericAssignability.ts, 5, 1)) |
| 11 | +>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 2, 17)) |
34 | 12 |
|
35 | 13 | parent: Parent<A> | null;
|
36 |
| ->parent : Symbol(Parent.parent, Decl(checkOrderDependenceGenericAssignability.ts, 25, 25)) |
| 14 | +>parent : Symbol(Parent.parent, Decl(checkOrderDependenceGenericAssignability.ts, 3, 25)) |
37 | 15 | >Parent : Symbol(Parent, Decl(checkOrderDependenceGenericAssignability.ts, 0, 0))
|
38 |
| ->A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 24, 17)) |
| 16 | +>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 2, 17)) |
39 | 17 | }
|
40 | 18 |
|
41 | 19 | interface Child<A, B = unknown> extends Parent<A> {
|
42 |
| ->Child : Symbol(Child, Decl(checkOrderDependenceGenericAssignability.ts, 27, 1)) |
43 |
| ->A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 29, 16)) |
44 |
| ->B : Symbol(B, Decl(checkOrderDependenceGenericAssignability.ts, 29, 18)) |
| 20 | +>Child : Symbol(Child, Decl(checkOrderDependenceGenericAssignability.ts, 5, 1)) |
| 21 | +>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 7, 16)) |
| 22 | +>B : Symbol(B, Decl(checkOrderDependenceGenericAssignability.ts, 7, 18)) |
45 | 23 | >Parent : Symbol(Parent, Decl(checkOrderDependenceGenericAssignability.ts, 0, 0))
|
46 |
| ->A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 29, 16)) |
| 24 | +>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 7, 16)) |
47 | 25 |
|
48 | 26 | readonly a: A;
|
49 |
| ->a : Symbol(Child.a, Decl(checkOrderDependenceGenericAssignability.ts, 29, 51)) |
50 |
| ->A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 29, 16)) |
| 27 | +>a : Symbol(Child.a, Decl(checkOrderDependenceGenericAssignability.ts, 7, 51)) |
| 28 | +>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 7, 16)) |
51 | 29 |
|
52 | 30 | // This field isn't necessary to the repro, but the
|
53 | 31 | // type parameter is, so including it
|
54 | 32 | readonly b: B;
|
55 |
| ->b : Symbol(Child.b, Decl(checkOrderDependenceGenericAssignability.ts, 30, 16)) |
56 |
| ->B : Symbol(B, Decl(checkOrderDependenceGenericAssignability.ts, 29, 18)) |
| 33 | +>b : Symbol(Child.b, Decl(checkOrderDependenceGenericAssignability.ts, 8, 16)) |
| 34 | +>B : Symbol(B, Decl(checkOrderDependenceGenericAssignability.ts, 7, 18)) |
57 | 35 | }
|
58 | 36 |
|
59 | 37 | function fn<A>(inp: Child<A>) {
|
60 |
| ->fn : Symbol(fn, Decl(checkOrderDependenceGenericAssignability.ts, 34, 1)) |
61 |
| ->A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 36, 12)) |
62 |
| ->inp : Symbol(inp, Decl(checkOrderDependenceGenericAssignability.ts, 36, 15)) |
63 |
| ->Child : Symbol(Child, Decl(checkOrderDependenceGenericAssignability.ts, 27, 1)) |
64 |
| ->A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 36, 12)) |
| 38 | +>fn : Symbol(fn, Decl(checkOrderDependenceGenericAssignability.ts, 12, 1)) |
| 39 | +>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 14, 12)) |
| 40 | +>inp : Symbol(inp, Decl(checkOrderDependenceGenericAssignability.ts, 14, 15)) |
| 41 | +>Child : Symbol(Child, Decl(checkOrderDependenceGenericAssignability.ts, 5, 1)) |
| 42 | +>A : Symbol(A, Decl(checkOrderDependenceGenericAssignability.ts, 14, 12)) |
65 | 43 |
|
66 | 44 | // This assignability check defeats the later one
|
67 | 45 | const a: Child<unknown> = inp;
|
68 |
| ->a : Symbol(a, Decl(checkOrderDependenceGenericAssignability.ts, 38, 7)) |
69 |
| ->Child : Symbol(Child, Decl(checkOrderDependenceGenericAssignability.ts, 27, 1)) |
70 |
| ->inp : Symbol(inp, Decl(checkOrderDependenceGenericAssignability.ts, 36, 15)) |
| 46 | +>a : Symbol(a, Decl(checkOrderDependenceGenericAssignability.ts, 16, 7)) |
| 47 | +>Child : Symbol(Child, Decl(checkOrderDependenceGenericAssignability.ts, 5, 1)) |
| 48 | +>inp : Symbol(inp, Decl(checkOrderDependenceGenericAssignability.ts, 14, 15)) |
71 | 49 | }
|
72 | 50 |
|
73 | 51 | // Allowed initialization of pu
|
74 | 52 | const pu: Parent<unknown> = { child: { a: 0, b: 0, child: null, parent: null }, parent: null };
|
75 |
| ->pu : Symbol(pu, Decl(checkOrderDependenceGenericAssignability.ts, 42, 5)) |
| 53 | +>pu : Symbol(pu, Decl(checkOrderDependenceGenericAssignability.ts, 20, 5)) |
76 | 54 | >Parent : Symbol(Parent, Decl(checkOrderDependenceGenericAssignability.ts, 0, 0))
|
77 |
| ->child : Symbol(child, Decl(checkOrderDependenceGenericAssignability.ts, 42, 29)) |
78 |
| ->a : Symbol(a, Decl(checkOrderDependenceGenericAssignability.ts, 42, 38)) |
79 |
| ->b : Symbol(b, Decl(checkOrderDependenceGenericAssignability.ts, 42, 44)) |
80 |
| ->child : Symbol(child, Decl(checkOrderDependenceGenericAssignability.ts, 42, 50)) |
81 |
| ->parent : Symbol(parent, Decl(checkOrderDependenceGenericAssignability.ts, 42, 63)) |
82 |
| ->parent : Symbol(parent, Decl(checkOrderDependenceGenericAssignability.ts, 42, 79)) |
| 55 | +>child : Symbol(child, Decl(checkOrderDependenceGenericAssignability.ts, 20, 29)) |
| 56 | +>a : Symbol(a, Decl(checkOrderDependenceGenericAssignability.ts, 20, 38)) |
| 57 | +>b : Symbol(b, Decl(checkOrderDependenceGenericAssignability.ts, 20, 44)) |
| 58 | +>child : Symbol(child, Decl(checkOrderDependenceGenericAssignability.ts, 20, 50)) |
| 59 | +>parent : Symbol(parent, Decl(checkOrderDependenceGenericAssignability.ts, 20, 63)) |
| 60 | +>parent : Symbol(parent, Decl(checkOrderDependenceGenericAssignability.ts, 20, 79)) |
83 | 61 |
|
84 | 62 | // Should error
|
85 | 63 | const notString: Parent<string> = pu;
|
86 |
| ->notString : Symbol(notString, Decl(checkOrderDependenceGenericAssignability.ts, 45, 5)) |
| 64 | +>notString : Symbol(notString, Decl(checkOrderDependenceGenericAssignability.ts, 23, 5)) |
87 | 65 | >Parent : Symbol(Parent, Decl(checkOrderDependenceGenericAssignability.ts, 0, 0))
|
88 |
| ->pu : Symbol(pu, Decl(checkOrderDependenceGenericAssignability.ts, 42, 5)) |
| 66 | +>pu : Symbol(pu, Decl(checkOrderDependenceGenericAssignability.ts, 20, 5)) |
89 | 67 |
|
0 commit comments