Skip to content

Commit 68cc758

Browse files
Accepted baselines.
1 parent 7543e2c commit 68cc758

7 files changed

+1315
-0
lines changed
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
//// [contextualNarrowingFromUnknownToObjects.ts]
2+
declare function keysOfEmptyObject(o: {}): string[];
3+
declare function keysOfNonPrimitive(o: object): string[];
4+
5+
namespace explicitConstraints {
6+
export function keyLengthsEqualUsingEmptyObjectFn<T>(a: T, b: T): [T, T] | undefined {
7+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
8+
return undefined;
9+
}
10+
if (Array.isArray(a) || Array.isArray(b)) {
11+
return undefined;
12+
}
13+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
14+
return [a, b];
15+
}
16+
return undefined;
17+
}
18+
19+
export function keyLengthsEqualUsingNonPrimitiveFn<T>(a: T, b: T): [T, T] | undefined {
20+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
21+
return undefined;
22+
}
23+
if (Array.isArray(a) || Array.isArray(b)) {
24+
return undefined;
25+
}
26+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
27+
return [a, b];
28+
}
29+
return undefined;
30+
}
31+
}
32+
33+
// Explicit Constraints of 'unknown'
34+
namespace explicitConstraintsOfUnknown {
35+
export function keyLengthsEqualUsingEmptyObjectFn<T>(a: T, b: T): [T, T] | undefined {
36+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
37+
return undefined;
38+
}
39+
if (Array.isArray(a) || Array.isArray(b)) {
40+
return undefined;
41+
}
42+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
43+
return [a, b];
44+
}
45+
return undefined;
46+
}
47+
48+
export function keyLengthsEqualUsingNonPrimitiveFn<T>(a: T, b: T): [T, T] | undefined {
49+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
50+
return undefined;
51+
}
52+
if (Array.isArray(a) || Array.isArray(b)) {
53+
return undefined;
54+
}
55+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
56+
return [a, b];
57+
}
58+
return undefined;
59+
}
60+
}
61+
62+
63+
//// [contextualNarrowingFromUnknownToObjects.js]
64+
var explicitConstraints;
65+
(function (explicitConstraints) {
66+
function keyLengthsEqualUsingEmptyObjectFn(a, b) {
67+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
68+
return undefined;
69+
}
70+
if (Array.isArray(a) || Array.isArray(b)) {
71+
return undefined;
72+
}
73+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
74+
return [a, b];
75+
}
76+
return undefined;
77+
}
78+
explicitConstraints.keyLengthsEqualUsingEmptyObjectFn = keyLengthsEqualUsingEmptyObjectFn;
79+
function keyLengthsEqualUsingNonPrimitiveFn(a, b) {
80+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
81+
return undefined;
82+
}
83+
if (Array.isArray(a) || Array.isArray(b)) {
84+
return undefined;
85+
}
86+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
87+
return [a, b];
88+
}
89+
return undefined;
90+
}
91+
explicitConstraints.keyLengthsEqualUsingNonPrimitiveFn = keyLengthsEqualUsingNonPrimitiveFn;
92+
})(explicitConstraints || (explicitConstraints = {}));
93+
// Explicit Constraints of 'unknown'
94+
var explicitConstraintsOfUnknown;
95+
(function (explicitConstraintsOfUnknown) {
96+
function keyLengthsEqualUsingEmptyObjectFn(a, b) {
97+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
98+
return undefined;
99+
}
100+
if (Array.isArray(a) || Array.isArray(b)) {
101+
return undefined;
102+
}
103+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
104+
return [a, b];
105+
}
106+
return undefined;
107+
}
108+
explicitConstraintsOfUnknown.keyLengthsEqualUsingEmptyObjectFn = keyLengthsEqualUsingEmptyObjectFn;
109+
function keyLengthsEqualUsingNonPrimitiveFn(a, b) {
110+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
111+
return undefined;
112+
}
113+
if (Array.isArray(a) || Array.isArray(b)) {
114+
return undefined;
115+
}
116+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
117+
return [a, b];
118+
}
119+
return undefined;
120+
}
121+
explicitConstraintsOfUnknown.keyLengthsEqualUsingNonPrimitiveFn = keyLengthsEqualUsingNonPrimitiveFn;
122+
})(explicitConstraintsOfUnknown || (explicitConstraintsOfUnknown = {}));
Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
=== tests/cases/compiler/contextualNarrowingFromUnknownToObjects.ts ===
2+
declare function keysOfEmptyObject(o: {}): string[];
3+
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
4+
>o : Symbol(o, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 35))
5+
6+
declare function keysOfNonPrimitive(o: object): string[];
7+
>keysOfNonPrimitive : Symbol(keysOfNonPrimitive, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 52))
8+
>o : Symbol(o, Decl(contextualNarrowingFromUnknownToObjects.ts, 1, 36))
9+
10+
namespace explicitConstraints {
11+
>explicitConstraints : Symbol(explicitConstraints, Decl(contextualNarrowingFromUnknownToObjects.ts, 1, 57))
12+
13+
export function keyLengthsEqualUsingEmptyObjectFn<T>(a: T, b: T): [T, T] | undefined {
14+
>keyLengthsEqualUsingEmptyObjectFn : Symbol(keyLengthsEqualUsingEmptyObjectFn, Decl(contextualNarrowingFromUnknownToObjects.ts, 3, 31))
15+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 54))
16+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 57))
17+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 54))
18+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 62))
19+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 54))
20+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 54))
21+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 54))
22+
23+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
24+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 57))
25+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 62))
26+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 57))
27+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 62))
28+
29+
return undefined;
30+
>undefined : Symbol(undefined)
31+
}
32+
if (Array.isArray(a) || Array.isArray(b)) {
33+
>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
34+
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
35+
>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
36+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 57))
37+
>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
38+
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
39+
>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
40+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 62))
41+
42+
return undefined;
43+
>undefined : Symbol(undefined)
44+
}
45+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
46+
>keysOfEmptyObject(a).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
47+
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
48+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 57))
49+
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
50+
>keysOfEmptyObject(b).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
51+
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
52+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 62))
53+
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
54+
55+
return [a, b];
56+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 57))
57+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 4, 62))
58+
}
59+
return undefined;
60+
>undefined : Symbol(undefined)
61+
}
62+
63+
export function keyLengthsEqualUsingNonPrimitiveFn<T>(a: T, b: T): [T, T] | undefined {
64+
>keyLengthsEqualUsingNonPrimitiveFn : Symbol(keyLengthsEqualUsingNonPrimitiveFn, Decl(contextualNarrowingFromUnknownToObjects.ts, 15, 5))
65+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 55))
66+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 58))
67+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 55))
68+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 63))
69+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 55))
70+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 55))
71+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 55))
72+
73+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
74+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 58))
75+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 63))
76+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 58))
77+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 63))
78+
79+
return undefined;
80+
>undefined : Symbol(undefined)
81+
}
82+
if (Array.isArray(a) || Array.isArray(b)) {
83+
>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
84+
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
85+
>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
86+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 58))
87+
>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
88+
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
89+
>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
90+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 63))
91+
92+
return undefined;
93+
>undefined : Symbol(undefined)
94+
}
95+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
96+
>keysOfEmptyObject(a).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
97+
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
98+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 58))
99+
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
100+
>keysOfEmptyObject(b).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
101+
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
102+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 63))
103+
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
104+
105+
return [a, b];
106+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 58))
107+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 17, 63))
108+
}
109+
return undefined;
110+
>undefined : Symbol(undefined)
111+
}
112+
}
113+
114+
// Explicit Constraints of 'unknown'
115+
namespace explicitConstraintsOfUnknown {
116+
>explicitConstraintsOfUnknown : Symbol(explicitConstraintsOfUnknown, Decl(contextualNarrowingFromUnknownToObjects.ts, 29, 1))
117+
118+
export function keyLengthsEqualUsingEmptyObjectFn<T>(a: T, b: T): [T, T] | undefined {
119+
>keyLengthsEqualUsingEmptyObjectFn : Symbol(keyLengthsEqualUsingEmptyObjectFn, Decl(contextualNarrowingFromUnknownToObjects.ts, 32, 40))
120+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 54))
121+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 57))
122+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 54))
123+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 62))
124+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 54))
125+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 54))
126+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 54))
127+
128+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
129+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 57))
130+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 62))
131+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 57))
132+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 62))
133+
134+
return undefined;
135+
>undefined : Symbol(undefined)
136+
}
137+
if (Array.isArray(a) || Array.isArray(b)) {
138+
>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
139+
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
140+
>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
141+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 57))
142+
>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
143+
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
144+
>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
145+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 62))
146+
147+
return undefined;
148+
>undefined : Symbol(undefined)
149+
}
150+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
151+
>keysOfEmptyObject(a).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
152+
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
153+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 57))
154+
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
155+
>keysOfEmptyObject(b).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
156+
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
157+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 62))
158+
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
159+
160+
return [a, b];
161+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 57))
162+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 33, 62))
163+
}
164+
return undefined;
165+
>undefined : Symbol(undefined)
166+
}
167+
168+
export function keyLengthsEqualUsingNonPrimitiveFn<T>(a: T, b: T): [T, T] | undefined {
169+
>keyLengthsEqualUsingNonPrimitiveFn : Symbol(keyLengthsEqualUsingNonPrimitiveFn, Decl(contextualNarrowingFromUnknownToObjects.ts, 44, 5))
170+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 55))
171+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 58))
172+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 55))
173+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 63))
174+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 55))
175+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 55))
176+
>T : Symbol(T, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 55))
177+
178+
if (typeof a !== "object" || typeof b !== "object" || !a || !b) {
179+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 58))
180+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 63))
181+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 58))
182+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 63))
183+
184+
return undefined;
185+
>undefined : Symbol(undefined)
186+
}
187+
if (Array.isArray(a) || Array.isArray(b)) {
188+
>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
189+
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
190+
>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
191+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 58))
192+
>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
193+
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --) ... and 3 more)
194+
>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.es5.d.ts, --, --))
195+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 63))
196+
197+
return undefined;
198+
>undefined : Symbol(undefined)
199+
}
200+
if (keysOfEmptyObject(a).length !== keysOfEmptyObject(b).length) {
201+
>keysOfEmptyObject(a).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
202+
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
203+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 58))
204+
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
205+
>keysOfEmptyObject(b).length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
206+
>keysOfEmptyObject : Symbol(keysOfEmptyObject, Decl(contextualNarrowingFromUnknownToObjects.ts, 0, 0))
207+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 63))
208+
>length : Symbol(Array.length, Decl(lib.es5.d.ts, --, --))
209+
210+
return [a, b];
211+
>a : Symbol(a, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 58))
212+
>b : Symbol(b, Decl(contextualNarrowingFromUnknownToObjects.ts, 46, 63))
213+
}
214+
return undefined;
215+
>undefined : Symbol(undefined)
216+
}
217+
}
218+

0 commit comments

Comments
 (0)