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 238 239 240 241 242 243 244 245 246 247 248 249
|
=== tests/cases/conformance/controlFlow/controlFlowOptionalChain2.ts ===
type A = {
>A : Symbol(A, Decl(controlFlowOptionalChain2.ts, 0, 0))
type: 'A';
>type : Symbol(type, Decl(controlFlowOptionalChain2.ts, 0, 10))
name: string;
>name : Symbol(name, Decl(controlFlowOptionalChain2.ts, 1, 12))
}
type B = {
>B : Symbol(B, Decl(controlFlowOptionalChain2.ts, 3, 1))
type: 'B';
>type : Symbol(type, Decl(controlFlowOptionalChain2.ts, 5, 10))
}
function funcTwo(arg: A | B | undefined) {
>funcTwo : Symbol(funcTwo, Decl(controlFlowOptionalChain2.ts, 7, 1))
>arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 9, 17))
>A : Symbol(A, Decl(controlFlowOptionalChain2.ts, 0, 0))
>B : Symbol(B, Decl(controlFlowOptionalChain2.ts, 3, 1))
if (arg?.type === 'B') {
>arg?.type : Symbol(type, Decl(controlFlowOptionalChain2.ts, 0, 10), Decl(controlFlowOptionalChain2.ts, 5, 10))
>arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 9, 17))
>type : Symbol(type, Decl(controlFlowOptionalChain2.ts, 0, 10), Decl(controlFlowOptionalChain2.ts, 5, 10))
arg; // `B`
>arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 9, 17))
return;
}
arg;
>arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 9, 17))
arg?.name;
>arg?.name : Symbol(name, Decl(controlFlowOptionalChain2.ts, 1, 12))
>arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 9, 17))
>name : Symbol(name, Decl(controlFlowOptionalChain2.ts, 1, 12))
}
function funcThree(arg: A | B | null) {
>funcThree : Symbol(funcThree, Decl(controlFlowOptionalChain2.ts, 17, 1))
>arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 19, 19))
>A : Symbol(A, Decl(controlFlowOptionalChain2.ts, 0, 0))
>B : Symbol(B, Decl(controlFlowOptionalChain2.ts, 3, 1))
if (arg?.type === 'B') {
>arg?.type : Symbol(type, Decl(controlFlowOptionalChain2.ts, 0, 10), Decl(controlFlowOptionalChain2.ts, 5, 10))
>arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 19, 19))
>type : Symbol(type, Decl(controlFlowOptionalChain2.ts, 0, 10), Decl(controlFlowOptionalChain2.ts, 5, 10))
arg; // `B`
>arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 19, 19))
return;
}
arg;
>arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 19, 19))
arg?.name;
>arg?.name : Symbol(name, Decl(controlFlowOptionalChain2.ts, 1, 12))
>arg : Symbol(arg, Decl(controlFlowOptionalChain2.ts, 19, 19))
>name : Symbol(name, Decl(controlFlowOptionalChain2.ts, 1, 12))
}
type U = { kind: undefined, u: 'u' }
>U : Symbol(U, Decl(controlFlowOptionalChain2.ts, 27, 1))
>kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10))
>u : Symbol(u, Decl(controlFlowOptionalChain2.ts, 29, 27))
type N = { kind: null, n: 'n' }
>N : Symbol(N, Decl(controlFlowOptionalChain2.ts, 29, 36))
>kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10))
>n : Symbol(n, Decl(controlFlowOptionalChain2.ts, 30, 22))
type X = { kind: 'X', x: 'x' }
>X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
>kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 31, 10))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 31, 21))
function f1(x: X | U | undefined) {
>f1 : Symbol(f1, Decl(controlFlowOptionalChain2.ts, 31, 30))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 33, 12))
>X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
>U : Symbol(U, Decl(controlFlowOptionalChain2.ts, 27, 1))
if (x?.kind === undefined) {
>x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 33, 12))
>kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
>undefined : Symbol(undefined)
x; // U | undefined
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 33, 12))
}
else {
x; // X
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 33, 12))
}
}
function f2(x: X | N | undefined) {
>f2 : Symbol(f2, Decl(controlFlowOptionalChain2.ts, 40, 1))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 42, 12))
>X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
>N : Symbol(N, Decl(controlFlowOptionalChain2.ts, 29, 36))
if (x?.kind === undefined) {
>x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 42, 12))
>kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
>undefined : Symbol(undefined)
x; // undefined
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 42, 12))
}
else {
x; // X | N
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 42, 12))
}
}
function f3(x: X | U | null) {
>f3 : Symbol(f3, Decl(controlFlowOptionalChain2.ts, 49, 1))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 51, 12))
>X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
>U : Symbol(U, Decl(controlFlowOptionalChain2.ts, 27, 1))
if (x?.kind === undefined) {
>x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 51, 12))
>kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
>undefined : Symbol(undefined)
x; // U | null
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 51, 12))
}
else {
x; // X
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 51, 12))
}
}
function f4(x: X | N | null) {
>f4 : Symbol(f4, Decl(controlFlowOptionalChain2.ts, 58, 1))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 60, 12))
>X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
>N : Symbol(N, Decl(controlFlowOptionalChain2.ts, 29, 36))
if (x?.kind === undefined) {
>x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 60, 12))
>kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
>undefined : Symbol(undefined)
x; // null
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 60, 12))
}
else {
x; // X | N
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 60, 12))
}
}
function f5(x: X | U | undefined) {
>f5 : Symbol(f5, Decl(controlFlowOptionalChain2.ts, 67, 1))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 69, 12))
>X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
>U : Symbol(U, Decl(controlFlowOptionalChain2.ts, 27, 1))
if (x?.kind === null) {
>x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 69, 12))
>kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
x; // never
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 69, 12))
}
else {
x; // X | U | undefined
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 69, 12))
}
}
function f6(x: X | N | undefined) {
>f6 : Symbol(f6, Decl(controlFlowOptionalChain2.ts, 76, 1))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 78, 12))
>X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
>N : Symbol(N, Decl(controlFlowOptionalChain2.ts, 29, 36))
if (x?.kind === null) {
>x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 78, 12))
>kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
x; // N
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 78, 12))
}
else {
x; // X | undefined
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 78, 12))
}
}
function f7(x: X | U | null) {
>f7 : Symbol(f7, Decl(controlFlowOptionalChain2.ts, 85, 1))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 87, 12))
>X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
>U : Symbol(U, Decl(controlFlowOptionalChain2.ts, 27, 1))
if (x?.kind === null) {
>x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 87, 12))
>kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 29, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
x; // never
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 87, 12))
}
else {
x; // X | U | null
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 87, 12))
}
}
function f8(x: X | N | null) {
>f8 : Symbol(f8, Decl(controlFlowOptionalChain2.ts, 94, 1))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 96, 12))
>X : Symbol(X, Decl(controlFlowOptionalChain2.ts, 30, 31))
>N : Symbol(N, Decl(controlFlowOptionalChain2.ts, 29, 36))
if (x?.kind === null) {
>x?.kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 96, 12))
>kind : Symbol(kind, Decl(controlFlowOptionalChain2.ts, 30, 10), Decl(controlFlowOptionalChain2.ts, 31, 10))
x; // N
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 96, 12))
}
else {
x; // X | null
>x : Symbol(x, Decl(controlFlowOptionalChain2.ts, 96, 12))
}
}
|