1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
|
=== tests/cases/compiler/narrowingByDiscriminantInLoop.ts ===
// Repro from #9977
type IDLMemberTypes = OperationMemberType | ConstantMemberType;
>IDLMemberTypes : Symbol(IDLMemberTypes, Decl(narrowingByDiscriminantInLoop.ts, 0, 0))
>OperationMemberType : Symbol(OperationMemberType, Decl(narrowingByDiscriminantInLoop.ts, 10, 1))
>ConstantMemberType : Symbol(ConstantMemberType, Decl(narrowingByDiscriminantInLoop.ts, 15, 1))
interface IDLTypeDescription {
>IDLTypeDescription : Symbol(IDLTypeDescription, Decl(narrowingByDiscriminantInLoop.ts, 2, 63))
origin: string;
>origin : Symbol(IDLTypeDescription.origin, Decl(narrowingByDiscriminantInLoop.ts, 4, 30))
}
interface InterfaceType {
>InterfaceType : Symbol(InterfaceType, Decl(narrowingByDiscriminantInLoop.ts, 6, 1))
members: IDLMemberTypes[];
>members : Symbol(InterfaceType.members, Decl(narrowingByDiscriminantInLoop.ts, 8, 25))
>IDLMemberTypes : Symbol(IDLMemberTypes, Decl(narrowingByDiscriminantInLoop.ts, 0, 0))
}
interface OperationMemberType {
>OperationMemberType : Symbol(OperationMemberType, Decl(narrowingByDiscriminantInLoop.ts, 10, 1))
type: "operation";
>type : Symbol(OperationMemberType.type, Decl(narrowingByDiscriminantInLoop.ts, 12, 31))
idlType: IDLTypeDescription;
>idlType : Symbol(OperationMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 13, 22))
>IDLTypeDescription : Symbol(IDLTypeDescription, Decl(narrowingByDiscriminantInLoop.ts, 2, 63))
}
interface ConstantMemberType {
>ConstantMemberType : Symbol(ConstantMemberType, Decl(narrowingByDiscriminantInLoop.ts, 15, 1))
type: "const";
>type : Symbol(ConstantMemberType.type, Decl(narrowingByDiscriminantInLoop.ts, 17, 30))
idlType: string;
>idlType : Symbol(ConstantMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 18, 18))
}
function insertInterface(callbackType: InterfaceType) {
>insertInterface : Symbol(insertInterface, Decl(narrowingByDiscriminantInLoop.ts, 20, 1))
>callbackType : Symbol(callbackType, Decl(narrowingByDiscriminantInLoop.ts, 22, 25))
>InterfaceType : Symbol(InterfaceType, Decl(narrowingByDiscriminantInLoop.ts, 6, 1))
for (const memberType of callbackType.members) {
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 23, 14))
>callbackType.members : Symbol(InterfaceType.members, Decl(narrowingByDiscriminantInLoop.ts, 8, 25))
>callbackType : Symbol(callbackType, Decl(narrowingByDiscriminantInLoop.ts, 22, 25))
>members : Symbol(InterfaceType.members, Decl(narrowingByDiscriminantInLoop.ts, 8, 25))
if (memberType.type === "const") {
>memberType.type : Symbol(type, Decl(narrowingByDiscriminantInLoop.ts, 12, 31), Decl(narrowingByDiscriminantInLoop.ts, 17, 30))
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 23, 14))
>type : Symbol(type, Decl(narrowingByDiscriminantInLoop.ts, 12, 31), Decl(narrowingByDiscriminantInLoop.ts, 17, 30))
memberType.idlType; // string
>memberType.idlType : Symbol(ConstantMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 18, 18))
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 23, 14))
>idlType : Symbol(ConstantMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 18, 18))
}
else if (memberType.type === "operation") {
>memberType.type : Symbol(OperationMemberType.type, Decl(narrowingByDiscriminantInLoop.ts, 12, 31))
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 23, 14))
>type : Symbol(OperationMemberType.type, Decl(narrowingByDiscriminantInLoop.ts, 12, 31))
memberType.idlType.origin; // string
>memberType.idlType.origin : Symbol(IDLTypeDescription.origin, Decl(narrowingByDiscriminantInLoop.ts, 4, 30))
>memberType.idlType : Symbol(OperationMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 13, 22))
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 23, 14))
>idlType : Symbol(OperationMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 13, 22))
>origin : Symbol(IDLTypeDescription.origin, Decl(narrowingByDiscriminantInLoop.ts, 4, 30))
(memberType.idlType as IDLTypeDescription);
>memberType.idlType : Symbol(OperationMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 13, 22))
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 23, 14))
>idlType : Symbol(OperationMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 13, 22))
>IDLTypeDescription : Symbol(IDLTypeDescription, Decl(narrowingByDiscriminantInLoop.ts, 2, 63))
}
}
}
function insertInterface2(callbackType: InterfaceType) {
>insertInterface2 : Symbol(insertInterface2, Decl(narrowingByDiscriminantInLoop.ts, 32, 1))
>callbackType : Symbol(callbackType, Decl(narrowingByDiscriminantInLoop.ts, 34, 26))
>InterfaceType : Symbol(InterfaceType, Decl(narrowingByDiscriminantInLoop.ts, 6, 1))
for (const memberType of callbackType.members) {
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 35, 14))
>callbackType.members : Symbol(InterfaceType.members, Decl(narrowingByDiscriminantInLoop.ts, 8, 25))
>callbackType : Symbol(callbackType, Decl(narrowingByDiscriminantInLoop.ts, 34, 26))
>members : Symbol(InterfaceType.members, Decl(narrowingByDiscriminantInLoop.ts, 8, 25))
if (memberType.type === "operation") {
>memberType.type : Symbol(type, Decl(narrowingByDiscriminantInLoop.ts, 12, 31), Decl(narrowingByDiscriminantInLoop.ts, 17, 30))
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 35, 14))
>type : Symbol(type, Decl(narrowingByDiscriminantInLoop.ts, 12, 31), Decl(narrowingByDiscriminantInLoop.ts, 17, 30))
memberType.idlType.origin; // string
>memberType.idlType.origin : Symbol(IDLTypeDescription.origin, Decl(narrowingByDiscriminantInLoop.ts, 4, 30))
>memberType.idlType : Symbol(OperationMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 13, 22))
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 35, 14))
>idlType : Symbol(OperationMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 13, 22))
>origin : Symbol(IDLTypeDescription.origin, Decl(narrowingByDiscriminantInLoop.ts, 4, 30))
}
}
}
function foo(memberType: IDLMemberTypes) {
>foo : Symbol(foo, Decl(narrowingByDiscriminantInLoop.ts, 40, 1))
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 42, 13))
>IDLMemberTypes : Symbol(IDLMemberTypes, Decl(narrowingByDiscriminantInLoop.ts, 0, 0))
if (memberType.type === "const") {
>memberType.type : Symbol(type, Decl(narrowingByDiscriminantInLoop.ts, 12, 31), Decl(narrowingByDiscriminantInLoop.ts, 17, 30))
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 42, 13))
>type : Symbol(type, Decl(narrowingByDiscriminantInLoop.ts, 12, 31), Decl(narrowingByDiscriminantInLoop.ts, 17, 30))
memberType.idlType; // string
>memberType.idlType : Symbol(ConstantMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 18, 18))
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 42, 13))
>idlType : Symbol(ConstantMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 18, 18))
}
else if (memberType.type === "operation") {
>memberType.type : Symbol(OperationMemberType.type, Decl(narrowingByDiscriminantInLoop.ts, 12, 31))
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 42, 13))
>type : Symbol(OperationMemberType.type, Decl(narrowingByDiscriminantInLoop.ts, 12, 31))
memberType.idlType.origin; // string
>memberType.idlType.origin : Symbol(IDLTypeDescription.origin, Decl(narrowingByDiscriminantInLoop.ts, 4, 30))
>memberType.idlType : Symbol(OperationMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 13, 22))
>memberType : Symbol(memberType, Decl(narrowingByDiscriminantInLoop.ts, 42, 13))
>idlType : Symbol(OperationMemberType.idlType, Decl(narrowingByDiscriminantInLoop.ts, 13, 22))
>origin : Symbol(IDLTypeDescription.origin, Decl(narrowingByDiscriminantInLoop.ts, 4, 30))
}
}
// Repro for issue similar to #8383
interface A {
>A : Symbol(A, Decl(narrowingByDiscriminantInLoop.ts, 49, 1))
kind: true;
>kind : Symbol(A.kind, Decl(narrowingByDiscriminantInLoop.ts, 53, 13))
prop: { a: string; };
>prop : Symbol(A.prop, Decl(narrowingByDiscriminantInLoop.ts, 54, 15))
>a : Symbol(a, Decl(narrowingByDiscriminantInLoop.ts, 55, 11))
}
interface B {
>B : Symbol(B, Decl(narrowingByDiscriminantInLoop.ts, 56, 1))
kind: false;
>kind : Symbol(B.kind, Decl(narrowingByDiscriminantInLoop.ts, 58, 13))
prop: { b: string; }
>prop : Symbol(B.prop, Decl(narrowingByDiscriminantInLoop.ts, 59, 16))
>b : Symbol(b, Decl(narrowingByDiscriminantInLoop.ts, 60, 11))
}
function f1(x: A | B) {
>f1 : Symbol(f1, Decl(narrowingByDiscriminantInLoop.ts, 61, 1))
>x : Symbol(x, Decl(narrowingByDiscriminantInLoop.ts, 63, 12))
>A : Symbol(A, Decl(narrowingByDiscriminantInLoop.ts, 49, 1))
>B : Symbol(B, Decl(narrowingByDiscriminantInLoop.ts, 56, 1))
while (true) {
x.prop;
>x.prop : Symbol(prop, Decl(narrowingByDiscriminantInLoop.ts, 54, 15), Decl(narrowingByDiscriminantInLoop.ts, 59, 16))
>x : Symbol(x, Decl(narrowingByDiscriminantInLoop.ts, 63, 12))
>prop : Symbol(prop, Decl(narrowingByDiscriminantInLoop.ts, 54, 15), Decl(narrowingByDiscriminantInLoop.ts, 59, 16))
if (x.kind === true) {
>x.kind : Symbol(kind, Decl(narrowingByDiscriminantInLoop.ts, 53, 13), Decl(narrowingByDiscriminantInLoop.ts, 58, 13))
>x : Symbol(x, Decl(narrowingByDiscriminantInLoop.ts, 63, 12))
>kind : Symbol(kind, Decl(narrowingByDiscriminantInLoop.ts, 53, 13), Decl(narrowingByDiscriminantInLoop.ts, 58, 13))
x.prop.a;
>x.prop.a : Symbol(a, Decl(narrowingByDiscriminantInLoop.ts, 55, 11))
>x.prop : Symbol(A.prop, Decl(narrowingByDiscriminantInLoop.ts, 54, 15))
>x : Symbol(x, Decl(narrowingByDiscriminantInLoop.ts, 63, 12))
>prop : Symbol(A.prop, Decl(narrowingByDiscriminantInLoop.ts, 54, 15))
>a : Symbol(a, Decl(narrowingByDiscriminantInLoop.ts, 55, 11))
}
if (x.kind === false) {
>x.kind : Symbol(kind, Decl(narrowingByDiscriminantInLoop.ts, 53, 13), Decl(narrowingByDiscriminantInLoop.ts, 58, 13))
>x : Symbol(x, Decl(narrowingByDiscriminantInLoop.ts, 63, 12))
>kind : Symbol(kind, Decl(narrowingByDiscriminantInLoop.ts, 53, 13), Decl(narrowingByDiscriminantInLoop.ts, 58, 13))
x.prop.b;
>x.prop.b : Symbol(b, Decl(narrowingByDiscriminantInLoop.ts, 60, 11))
>x.prop : Symbol(B.prop, Decl(narrowingByDiscriminantInLoop.ts, 59, 16))
>x : Symbol(x, Decl(narrowingByDiscriminantInLoop.ts, 63, 12))
>prop : Symbol(B.prop, Decl(narrowingByDiscriminantInLoop.ts, 59, 16))
>b : Symbol(b, Decl(narrowingByDiscriminantInLoop.ts, 60, 11))
}
}
}
function f2(x: A | B) {
>f2 : Symbol(f2, Decl(narrowingByDiscriminantInLoop.ts, 73, 1))
>x : Symbol(x, Decl(narrowingByDiscriminantInLoop.ts, 75, 12))
>A : Symbol(A, Decl(narrowingByDiscriminantInLoop.ts, 49, 1))
>B : Symbol(B, Decl(narrowingByDiscriminantInLoop.ts, 56, 1))
while (true) {
if (x.kind) {
>x.kind : Symbol(kind, Decl(narrowingByDiscriminantInLoop.ts, 53, 13), Decl(narrowingByDiscriminantInLoop.ts, 58, 13))
>x : Symbol(x, Decl(narrowingByDiscriminantInLoop.ts, 75, 12))
>kind : Symbol(kind, Decl(narrowingByDiscriminantInLoop.ts, 53, 13), Decl(narrowingByDiscriminantInLoop.ts, 58, 13))
x.prop.a;
>x.prop.a : Symbol(a, Decl(narrowingByDiscriminantInLoop.ts, 55, 11))
>x.prop : Symbol(A.prop, Decl(narrowingByDiscriminantInLoop.ts, 54, 15))
>x : Symbol(x, Decl(narrowingByDiscriminantInLoop.ts, 75, 12))
>prop : Symbol(A.prop, Decl(narrowingByDiscriminantInLoop.ts, 54, 15))
>a : Symbol(a, Decl(narrowingByDiscriminantInLoop.ts, 55, 11))
}
if (!x.kind) {
>x.kind : Symbol(kind, Decl(narrowingByDiscriminantInLoop.ts, 53, 13), Decl(narrowingByDiscriminantInLoop.ts, 58, 13))
>x : Symbol(x, Decl(narrowingByDiscriminantInLoop.ts, 75, 12))
>kind : Symbol(kind, Decl(narrowingByDiscriminantInLoop.ts, 53, 13), Decl(narrowingByDiscriminantInLoop.ts, 58, 13))
x.prop.b;
>x.prop.b : Symbol(b, Decl(narrowingByDiscriminantInLoop.ts, 60, 11))
>x.prop : Symbol(B.prop, Decl(narrowingByDiscriminantInLoop.ts, 59, 16))
>x : Symbol(x, Decl(narrowingByDiscriminantInLoop.ts, 75, 12))
>prop : Symbol(B.prop, Decl(narrowingByDiscriminantInLoop.ts, 59, 16))
>b : Symbol(b, Decl(narrowingByDiscriminantInLoop.ts, 60, 11))
}
}
}
|