|
| 1 | +=== tests/cases/compiler/intersectionTypeNormalization.ts === |
| 2 | +interface A { a: string } |
| 3 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 4 | +>a : Symbol(A.a, Decl(intersectionTypeNormalization.ts, 0, 13)) |
| 5 | + |
| 6 | +interface B { b: string } |
| 7 | +>B : Symbol(B, Decl(intersectionTypeNormalization.ts, 0, 25)) |
| 8 | +>b : Symbol(B.b, Decl(intersectionTypeNormalization.ts, 1, 13)) |
| 9 | + |
| 10 | +interface C { c: string } |
| 11 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 12 | +>c : Symbol(C.c, Decl(intersectionTypeNormalization.ts, 2, 13)) |
| 13 | + |
| 14 | +interface D { d: string } |
| 15 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 16 | +>d : Symbol(D.d, Decl(intersectionTypeNormalization.ts, 3, 13)) |
| 17 | + |
| 18 | +// Identical ways of writing the same type |
| 19 | +type X1 = (A | B) & (C | D); |
| 20 | +>X1 : Symbol(X1, Decl(intersectionTypeNormalization.ts, 3, 25)) |
| 21 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 22 | +>B : Symbol(B, Decl(intersectionTypeNormalization.ts, 0, 25)) |
| 23 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 24 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 25 | + |
| 26 | +type X2 = A & (C | D) | B & (C | D) |
| 27 | +>X2 : Symbol(X2, Decl(intersectionTypeNormalization.ts, 6, 28)) |
| 28 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 29 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 30 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 31 | +>B : Symbol(B, Decl(intersectionTypeNormalization.ts, 0, 25)) |
| 32 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 33 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 34 | + |
| 35 | +type X3 = A & C | A & D | B & C | B & D; |
| 36 | +>X3 : Symbol(X3, Decl(intersectionTypeNormalization.ts, 7, 35)) |
| 37 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 38 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 39 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 40 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 41 | +>B : Symbol(B, Decl(intersectionTypeNormalization.ts, 0, 25)) |
| 42 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 43 | +>B : Symbol(B, Decl(intersectionTypeNormalization.ts, 0, 25)) |
| 44 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 45 | + |
| 46 | +var x: X1; |
| 47 | +>x : Symbol(x, Decl(intersectionTypeNormalization.ts, 10, 3), Decl(intersectionTypeNormalization.ts, 11, 3), Decl(intersectionTypeNormalization.ts, 12, 3)) |
| 48 | +>X1 : Symbol(X1, Decl(intersectionTypeNormalization.ts, 3, 25)) |
| 49 | + |
| 50 | +var x: X2; |
| 51 | +>x : Symbol(x, Decl(intersectionTypeNormalization.ts, 10, 3), Decl(intersectionTypeNormalization.ts, 11, 3), Decl(intersectionTypeNormalization.ts, 12, 3)) |
| 52 | +>X2 : Symbol(X2, Decl(intersectionTypeNormalization.ts, 6, 28)) |
| 53 | + |
| 54 | +var x: X3; |
| 55 | +>x : Symbol(x, Decl(intersectionTypeNormalization.ts, 10, 3), Decl(intersectionTypeNormalization.ts, 11, 3), Decl(intersectionTypeNormalization.ts, 12, 3)) |
| 56 | +>X3 : Symbol(X3, Decl(intersectionTypeNormalization.ts, 7, 35)) |
| 57 | + |
| 58 | +interface X { x: string } |
| 59 | +>X : Symbol(X, Decl(intersectionTypeNormalization.ts, 12, 10)) |
| 60 | +>x : Symbol(X.x, Decl(intersectionTypeNormalization.ts, 14, 13)) |
| 61 | + |
| 62 | +interface Y { y: string } |
| 63 | +>Y : Symbol(Y, Decl(intersectionTypeNormalization.ts, 14, 25)) |
| 64 | +>y : Symbol(Y.y, Decl(intersectionTypeNormalization.ts, 15, 13)) |
| 65 | + |
| 66 | +// Identical ways of writing the same type |
| 67 | +type Y1 = (A | X & Y) & (C | D); |
| 68 | +>Y1 : Symbol(Y1, Decl(intersectionTypeNormalization.ts, 15, 25)) |
| 69 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 70 | +>X : Symbol(X, Decl(intersectionTypeNormalization.ts, 12, 10)) |
| 71 | +>Y : Symbol(Y, Decl(intersectionTypeNormalization.ts, 14, 25)) |
| 72 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 73 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 74 | + |
| 75 | +type Y2 = A & (C | D) | X & Y & (C | D) |
| 76 | +>Y2 : Symbol(Y2, Decl(intersectionTypeNormalization.ts, 18, 32)) |
| 77 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 78 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 79 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 80 | +>X : Symbol(X, Decl(intersectionTypeNormalization.ts, 12, 10)) |
| 81 | +>Y : Symbol(Y, Decl(intersectionTypeNormalization.ts, 14, 25)) |
| 82 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 83 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 84 | + |
| 85 | +type Y3 = A & C | A & D | X & Y & C | X & Y & D; |
| 86 | +>Y3 : Symbol(Y3, Decl(intersectionTypeNormalization.ts, 19, 39)) |
| 87 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 88 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 89 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 90 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 91 | +>X : Symbol(X, Decl(intersectionTypeNormalization.ts, 12, 10)) |
| 92 | +>Y : Symbol(Y, Decl(intersectionTypeNormalization.ts, 14, 25)) |
| 93 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 94 | +>X : Symbol(X, Decl(intersectionTypeNormalization.ts, 12, 10)) |
| 95 | +>Y : Symbol(Y, Decl(intersectionTypeNormalization.ts, 14, 25)) |
| 96 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 97 | + |
| 98 | +var y: Y1; |
| 99 | +>y : Symbol(y, Decl(intersectionTypeNormalization.ts, 22, 3), Decl(intersectionTypeNormalization.ts, 23, 3), Decl(intersectionTypeNormalization.ts, 24, 3)) |
| 100 | +>Y1 : Symbol(Y1, Decl(intersectionTypeNormalization.ts, 15, 25)) |
| 101 | + |
| 102 | +var y: Y2; |
| 103 | +>y : Symbol(y, Decl(intersectionTypeNormalization.ts, 22, 3), Decl(intersectionTypeNormalization.ts, 23, 3), Decl(intersectionTypeNormalization.ts, 24, 3)) |
| 104 | +>Y2 : Symbol(Y2, Decl(intersectionTypeNormalization.ts, 18, 32)) |
| 105 | + |
| 106 | +var y: Y3; |
| 107 | +>y : Symbol(y, Decl(intersectionTypeNormalization.ts, 22, 3), Decl(intersectionTypeNormalization.ts, 23, 3), Decl(intersectionTypeNormalization.ts, 24, 3)) |
| 108 | +>Y3 : Symbol(Y3, Decl(intersectionTypeNormalization.ts, 19, 39)) |
| 109 | + |
| 110 | +interface M { m: string } |
| 111 | +>M : Symbol(M, Decl(intersectionTypeNormalization.ts, 24, 10)) |
| 112 | +>m : Symbol(M.m, Decl(intersectionTypeNormalization.ts, 26, 13)) |
| 113 | + |
| 114 | +interface N { n: string } |
| 115 | +>N : Symbol(N, Decl(intersectionTypeNormalization.ts, 26, 25)) |
| 116 | +>n : Symbol(N.n, Decl(intersectionTypeNormalization.ts, 27, 13)) |
| 117 | + |
| 118 | +// Identical ways of writing the same type |
| 119 | +type Z1 = (A | X & (M | N)) & (C | D); |
| 120 | +>Z1 : Symbol(Z1, Decl(intersectionTypeNormalization.ts, 27, 25)) |
| 121 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 122 | +>X : Symbol(X, Decl(intersectionTypeNormalization.ts, 12, 10)) |
| 123 | +>M : Symbol(M, Decl(intersectionTypeNormalization.ts, 24, 10)) |
| 124 | +>N : Symbol(N, Decl(intersectionTypeNormalization.ts, 26, 25)) |
| 125 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 126 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 127 | + |
| 128 | +type Z2 = A & (C | D) | X & (M | N) & (C | D) |
| 129 | +>Z2 : Symbol(Z2, Decl(intersectionTypeNormalization.ts, 30, 38)) |
| 130 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 131 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 132 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 133 | +>X : Symbol(X, Decl(intersectionTypeNormalization.ts, 12, 10)) |
| 134 | +>M : Symbol(M, Decl(intersectionTypeNormalization.ts, 24, 10)) |
| 135 | +>N : Symbol(N, Decl(intersectionTypeNormalization.ts, 26, 25)) |
| 136 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 137 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 138 | + |
| 139 | +type Z3 = A & C | A & D | X & (M | N) & C | X & (M | N) & D; |
| 140 | +>Z3 : Symbol(Z3, Decl(intersectionTypeNormalization.ts, 31, 45)) |
| 141 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 142 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 143 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 144 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 145 | +>X : Symbol(X, Decl(intersectionTypeNormalization.ts, 12, 10)) |
| 146 | +>M : Symbol(M, Decl(intersectionTypeNormalization.ts, 24, 10)) |
| 147 | +>N : Symbol(N, Decl(intersectionTypeNormalization.ts, 26, 25)) |
| 148 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 149 | +>X : Symbol(X, Decl(intersectionTypeNormalization.ts, 12, 10)) |
| 150 | +>M : Symbol(M, Decl(intersectionTypeNormalization.ts, 24, 10)) |
| 151 | +>N : Symbol(N, Decl(intersectionTypeNormalization.ts, 26, 25)) |
| 152 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 153 | + |
| 154 | +type Z4 = A & C | A & D | X & M & C | X & N & C | X & M & D | X & N & D; |
| 155 | +>Z4 : Symbol(Z4, Decl(intersectionTypeNormalization.ts, 32, 60)) |
| 156 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 157 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 158 | +>A : Symbol(A, Decl(intersectionTypeNormalization.ts, 0, 0)) |
| 159 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 160 | +>X : Symbol(X, Decl(intersectionTypeNormalization.ts, 12, 10)) |
| 161 | +>M : Symbol(M, Decl(intersectionTypeNormalization.ts, 24, 10)) |
| 162 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 163 | +>X : Symbol(X, Decl(intersectionTypeNormalization.ts, 12, 10)) |
| 164 | +>N : Symbol(N, Decl(intersectionTypeNormalization.ts, 26, 25)) |
| 165 | +>C : Symbol(C, Decl(intersectionTypeNormalization.ts, 1, 25)) |
| 166 | +>X : Symbol(X, Decl(intersectionTypeNormalization.ts, 12, 10)) |
| 167 | +>M : Symbol(M, Decl(intersectionTypeNormalization.ts, 24, 10)) |
| 168 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 169 | +>X : Symbol(X, Decl(intersectionTypeNormalization.ts, 12, 10)) |
| 170 | +>N : Symbol(N, Decl(intersectionTypeNormalization.ts, 26, 25)) |
| 171 | +>D : Symbol(D, Decl(intersectionTypeNormalization.ts, 2, 25)) |
| 172 | + |
| 173 | +var z: Z1; |
| 174 | +>z : Symbol(z, Decl(intersectionTypeNormalization.ts, 35, 3), Decl(intersectionTypeNormalization.ts, 36, 3), Decl(intersectionTypeNormalization.ts, 37, 3), Decl(intersectionTypeNormalization.ts, 38, 3)) |
| 175 | +>Z1 : Symbol(Z1, Decl(intersectionTypeNormalization.ts, 27, 25)) |
| 176 | + |
| 177 | +var z: Z2; |
| 178 | +>z : Symbol(z, Decl(intersectionTypeNormalization.ts, 35, 3), Decl(intersectionTypeNormalization.ts, 36, 3), Decl(intersectionTypeNormalization.ts, 37, 3), Decl(intersectionTypeNormalization.ts, 38, 3)) |
| 179 | +>Z2 : Symbol(Z2, Decl(intersectionTypeNormalization.ts, 30, 38)) |
| 180 | + |
| 181 | +var z: Z3; |
| 182 | +>z : Symbol(z, Decl(intersectionTypeNormalization.ts, 35, 3), Decl(intersectionTypeNormalization.ts, 36, 3), Decl(intersectionTypeNormalization.ts, 37, 3), Decl(intersectionTypeNormalization.ts, 38, 3)) |
| 183 | +>Z3 : Symbol(Z3, Decl(intersectionTypeNormalization.ts, 31, 45)) |
| 184 | + |
| 185 | +var z: Z4; |
| 186 | +>z : Symbol(z, Decl(intersectionTypeNormalization.ts, 35, 3), Decl(intersectionTypeNormalization.ts, 36, 3), Decl(intersectionTypeNormalization.ts, 37, 3), Decl(intersectionTypeNormalization.ts, 38, 3)) |
| 187 | +>Z4 : Symbol(Z4, Decl(intersectionTypeNormalization.ts, 32, 60)) |
| 188 | + |
| 189 | +// Repro from #9919 |
| 190 | + |
| 191 | +type ToString = { |
| 192 | +>ToString : Symbol(ToString, Decl(intersectionTypeNormalization.ts, 38, 10)) |
| 193 | + |
| 194 | + toString(): string; |
| 195 | +>toString : Symbol(toString, Decl(intersectionTypeNormalization.ts, 42, 17)) |
| 196 | +} |
| 197 | + |
| 198 | +type BoxedValue = { kind: 'int', num: number } |
| 199 | +>BoxedValue : Symbol(BoxedValue, Decl(intersectionTypeNormalization.ts, 44, 1)) |
| 200 | +>kind : Symbol(kind, Decl(intersectionTypeNormalization.ts, 46, 19)) |
| 201 | +>num : Symbol(num, Decl(intersectionTypeNormalization.ts, 46, 32)) |
| 202 | + |
| 203 | + | { kind: 'string', str: string } |
| 204 | +>kind : Symbol(kind, Decl(intersectionTypeNormalization.ts, 47, 19)) |
| 205 | +>str : Symbol(str, Decl(intersectionTypeNormalization.ts, 47, 35)) |
| 206 | + |
| 207 | +type IntersectionFail = BoxedValue & ToString |
| 208 | +>IntersectionFail : Symbol(IntersectionFail, Decl(intersectionTypeNormalization.ts, 47, 49)) |
| 209 | +>BoxedValue : Symbol(BoxedValue, Decl(intersectionTypeNormalization.ts, 44, 1)) |
| 210 | +>ToString : Symbol(ToString, Decl(intersectionTypeNormalization.ts, 38, 10)) |
| 211 | + |
| 212 | +type IntersectionInline = { kind: 'int', num: number } & ToString |
| 213 | +>IntersectionInline : Symbol(IntersectionInline, Decl(intersectionTypeNormalization.ts, 49, 45)) |
| 214 | +>kind : Symbol(kind, Decl(intersectionTypeNormalization.ts, 51, 27)) |
| 215 | +>num : Symbol(num, Decl(intersectionTypeNormalization.ts, 51, 40)) |
| 216 | +>ToString : Symbol(ToString, Decl(intersectionTypeNormalization.ts, 38, 10)) |
| 217 | + |
| 218 | + | { kind: 'string', str: string } & ToString |
| 219 | +>kind : Symbol(kind, Decl(intersectionTypeNormalization.ts, 52, 27)) |
| 220 | +>str : Symbol(str, Decl(intersectionTypeNormalization.ts, 52, 43)) |
| 221 | +>ToString : Symbol(ToString, Decl(intersectionTypeNormalization.ts, 38, 10)) |
| 222 | + |
| 223 | +function getValueAsString(value: IntersectionFail): string { |
| 224 | +>getValueAsString : Symbol(getValueAsString, Decl(intersectionTypeNormalization.ts, 52, 68)) |
| 225 | +>value : Symbol(value, Decl(intersectionTypeNormalization.ts, 54, 26)) |
| 226 | +>IntersectionFail : Symbol(IntersectionFail, Decl(intersectionTypeNormalization.ts, 47, 49)) |
| 227 | + |
| 228 | + if (value.kind === 'int') { |
| 229 | +>value.kind : Symbol(kind, Decl(intersectionTypeNormalization.ts, 46, 19), Decl(intersectionTypeNormalization.ts, 47, 19)) |
| 230 | +>value : Symbol(value, Decl(intersectionTypeNormalization.ts, 54, 26)) |
| 231 | +>kind : Symbol(kind, Decl(intersectionTypeNormalization.ts, 46, 19), Decl(intersectionTypeNormalization.ts, 47, 19)) |
| 232 | + |
| 233 | + return '' + value.num; |
| 234 | +>value.num : Symbol(num, Decl(intersectionTypeNormalization.ts, 46, 32)) |
| 235 | +>value : Symbol(value, Decl(intersectionTypeNormalization.ts, 54, 26)) |
| 236 | +>num : Symbol(num, Decl(intersectionTypeNormalization.ts, 46, 32)) |
| 237 | + } |
| 238 | + return value.str; |
| 239 | +>value.str : Symbol(str, Decl(intersectionTypeNormalization.ts, 47, 35)) |
| 240 | +>value : Symbol(value, Decl(intersectionTypeNormalization.ts, 54, 26)) |
| 241 | +>str : Symbol(str, Decl(intersectionTypeNormalization.ts, 47, 35)) |
| 242 | +} |
0 commit comments