Skip to content

Commit b0d7d5a

Browse files
authored
Fix #21089: Do not infer from numeric index signature in Object.values and Object.entries (#21129)
* Fix #21089: Do not infer from numeric index signature in Object.values and Object.entries * Update test
1 parent 3c988e8 commit b0d7d5a

6 files changed

+288
-44
lines changed

src/lib/es2017.object.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ interface ObjectConstructor {
33
* Returns an array of values of the enumerable properties of an object
44
* @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.
55
*/
6-
values<T>(o: { [s: string]: T } | { [n: number]: T }): T[];
6+
values<T>(o: { [s: string]: T } | ArrayLike<T>): T[];
77

88
/**
99
* Returns an array of values of the enumerable properties of an object
@@ -15,7 +15,7 @@ interface ObjectConstructor {
1515
* Returns an array of key/values of the enumerable properties of an object
1616
* @param o Object that contains the properties and methods. This can be an object that you created or an existing Document Object Model (DOM) object.
1717
*/
18-
entries<T>(o: { [s: string]: T } | { [n: number]: T }): [string, T][];
18+
entries<T>(o: { [s: string]: T } | ArrayLike<T>): [string, T][];
1919

2020
/**
2121
* Returns an array of key/values of the enumerable properties of an object

tests/baselines/reference/useObjectValuesAndEntries1.js

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,55 @@ for (var x of Object.values(o)) {
55
let y = x;
66
}
77

8-
var entries = Object.entries(o);
9-
var entries1 = Object.entries(1);
10-
var entries2 = Object.entries({a: true, b: 2})
11-
var entries3 = Object.entries({})
12-
8+
var entries = Object.entries(o); // [string, number][]
9+
var values = Object.values(o); // number[]
10+
11+
var entries1 = Object.entries(1); // [string, any][]
12+
var values1 = Object.values(1); // any[]
13+
14+
var entries2 = Object.entries({ a: true, b: 2 }); // [string, number|boolean][]
15+
var values2 = Object.values({ a: true, b: 2 }); // (number|boolean)[]
16+
17+
var entries3 = Object.entries({}); // [string, {}][]
18+
var values3 = Object.values({}); // {}[]
19+
20+
var a = ["a", "b", "c"];
21+
var entries4 = Object.entries(a); // [string, string][]
22+
var values4 = Object.values(a); // string[]
23+
24+
enum E { A, B }
25+
var entries5 = Object.entries(E); // [string, any][]
26+
var values5 = Object.values(E); // any[]
27+
28+
interface I { }
29+
var i: I = {};
30+
var entries6 = Object.entries(i); // [string, any][]
31+
var values6 = Object.values(i); // any[]
1332

1433
//// [useObjectValuesAndEntries1.js]
1534
var o = { a: 1, b: 2 };
1635
for (var _i = 0, _a = Object.values(o); _i < _a.length; _i++) {
1736
var x = _a[_i];
1837
var y = x;
1938
}
20-
var entries = Object.entries(o);
21-
var entries1 = Object.entries(1);
22-
var entries2 = Object.entries({ a: true, b: 2 });
23-
var entries3 = Object.entries({});
39+
var entries = Object.entries(o); // [string, number][]
40+
var values = Object.values(o); // number[]
41+
var entries1 = Object.entries(1); // [string, any][]
42+
var values1 = Object.values(1); // any[]
43+
var entries2 = Object.entries({ a: true, b: 2 }); // [string, number|boolean][]
44+
var values2 = Object.values({ a: true, b: 2 }); // (number|boolean)[]
45+
var entries3 = Object.entries({}); // [string, {}][]
46+
var values3 = Object.values({}); // {}[]
47+
var a = ["a", "b", "c"];
48+
var entries4 = Object.entries(a); // [string, string][]
49+
var values4 = Object.values(a); // string[]
50+
var E;
51+
(function (E) {
52+
E[E["A"] = 0] = "A";
53+
E[E["B"] = 1] = "B";
54+
})(E || (E = {}));
55+
var entries5 = Object.entries(E); // [string, any][]
56+
var values5 = Object.values(E); // any[]
57+
var i = {};
58+
var entries6 = Object.entries(i); // [string, any][]
59+
var values6 = Object.values(i); // any[]

tests/baselines/reference/useObjectValuesAndEntries1.symbols

Lines changed: 93 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,114 @@ for (var x of Object.values(o)) {
1616
>x : Symbol(x, Decl(useObjectValuesAndEntries1.ts, 2, 8))
1717
}
1818

19-
var entries = Object.entries(o);
19+
var entries = Object.entries(o); // [string, number][]
2020
>entries : Symbol(entries, Decl(useObjectValuesAndEntries1.ts, 6, 3))
2121
>Object.entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
2222
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
2323
>entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
2424
>o : Symbol(o, Decl(useObjectValuesAndEntries1.ts, 0, 3))
2525

26-
var entries1 = Object.entries(1);
27-
>entries1 : Symbol(entries1, Decl(useObjectValuesAndEntries1.ts, 7, 3))
26+
var values = Object.values(o); // number[]
27+
>values : Symbol(values, Decl(useObjectValuesAndEntries1.ts, 7, 3))
28+
>Object.values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
29+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
30+
>values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
31+
>o : Symbol(o, Decl(useObjectValuesAndEntries1.ts, 0, 3))
32+
33+
var entries1 = Object.entries(1); // [string, any][]
34+
>entries1 : Symbol(entries1, Decl(useObjectValuesAndEntries1.ts, 9, 3))
2835
>Object.entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
2936
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
3037
>entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
3138

32-
var entries2 = Object.entries({a: true, b: 2})
33-
>entries2 : Symbol(entries2, Decl(useObjectValuesAndEntries1.ts, 8, 3))
39+
var values1 = Object.values(1); // any[]
40+
>values1 : Symbol(values1, Decl(useObjectValuesAndEntries1.ts, 10, 3))
41+
>Object.values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
42+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
43+
>values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
44+
45+
var entries2 = Object.entries({ a: true, b: 2 }); // [string, number|boolean][]
46+
>entries2 : Symbol(entries2, Decl(useObjectValuesAndEntries1.ts, 12, 3))
3447
>Object.entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
3548
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
3649
>entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
37-
>a : Symbol(a, Decl(useObjectValuesAndEntries1.ts, 8, 31))
38-
>b : Symbol(b, Decl(useObjectValuesAndEntries1.ts, 8, 39))
50+
>a : Symbol(a, Decl(useObjectValuesAndEntries1.ts, 12, 31))
51+
>b : Symbol(b, Decl(useObjectValuesAndEntries1.ts, 12, 40))
3952

40-
var entries3 = Object.entries({})
41-
>entries3 : Symbol(entries3, Decl(useObjectValuesAndEntries1.ts, 9, 3))
53+
var values2 = Object.values({ a: true, b: 2 }); // (number|boolean)[]
54+
>values2 : Symbol(values2, Decl(useObjectValuesAndEntries1.ts, 13, 3))
55+
>Object.values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
56+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
57+
>values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
58+
>a : Symbol(a, Decl(useObjectValuesAndEntries1.ts, 13, 29))
59+
>b : Symbol(b, Decl(useObjectValuesAndEntries1.ts, 13, 38))
60+
61+
var entries3 = Object.entries({}); // [string, {}][]
62+
>entries3 : Symbol(entries3, Decl(useObjectValuesAndEntries1.ts, 15, 3))
4263
>Object.entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
4364
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
4465
>entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
4566

67+
var values3 = Object.values({}); // {}[]
68+
>values3 : Symbol(values3, Decl(useObjectValuesAndEntries1.ts, 16, 3))
69+
>Object.values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
70+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
71+
>values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
72+
73+
var a = ["a", "b", "c"];
74+
>a : Symbol(a, Decl(useObjectValuesAndEntries1.ts, 18, 3))
75+
76+
var entries4 = Object.entries(a); // [string, string][]
77+
>entries4 : Symbol(entries4, Decl(useObjectValuesAndEntries1.ts, 19, 3))
78+
>Object.entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
79+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
80+
>entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
81+
>a : Symbol(a, Decl(useObjectValuesAndEntries1.ts, 18, 3))
82+
83+
var values4 = Object.values(a); // string[]
84+
>values4 : Symbol(values4, Decl(useObjectValuesAndEntries1.ts, 20, 3))
85+
>Object.values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
86+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
87+
>values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
88+
>a : Symbol(a, Decl(useObjectValuesAndEntries1.ts, 18, 3))
89+
90+
enum E { A, B }
91+
>E : Symbol(E, Decl(useObjectValuesAndEntries1.ts, 20, 31))
92+
>A : Symbol(E.A, Decl(useObjectValuesAndEntries1.ts, 22, 8))
93+
>B : Symbol(E.B, Decl(useObjectValuesAndEntries1.ts, 22, 11))
94+
95+
var entries5 = Object.entries(E); // [string, any][]
96+
>entries5 : Symbol(entries5, Decl(useObjectValuesAndEntries1.ts, 23, 3))
97+
>Object.entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
98+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
99+
>entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
100+
>E : Symbol(E, Decl(useObjectValuesAndEntries1.ts, 20, 31))
101+
102+
var values5 = Object.values(E); // any[]
103+
>values5 : Symbol(values5, Decl(useObjectValuesAndEntries1.ts, 24, 3))
104+
>Object.values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
105+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
106+
>values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
107+
>E : Symbol(E, Decl(useObjectValuesAndEntries1.ts, 20, 31))
108+
109+
interface I { }
110+
>I : Symbol(I, Decl(useObjectValuesAndEntries1.ts, 24, 31))
111+
112+
var i: I = {};
113+
>i : Symbol(i, Decl(useObjectValuesAndEntries1.ts, 27, 3))
114+
>I : Symbol(I, Decl(useObjectValuesAndEntries1.ts, 24, 31))
115+
116+
var entries6 = Object.entries(i); // [string, any][]
117+
>entries6 : Symbol(entries6, Decl(useObjectValuesAndEntries1.ts, 28, 3))
118+
>Object.entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
119+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
120+
>entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
121+
>i : Symbol(i, Decl(useObjectValuesAndEntries1.ts, 27, 3))
122+
123+
var values6 = Object.values(i); // any[]
124+
>values6 : Symbol(values6, Decl(useObjectValuesAndEntries1.ts, 29, 3))
125+
>Object.values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
126+
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
127+
>values : Symbol(ObjectConstructor.values, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
128+
>i : Symbol(i, Decl(useObjectValuesAndEntries1.ts, 27, 3))
129+

tests/baselines/reference/useObjectValuesAndEntries1.types

Lines changed: 120 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,49 +10,153 @@ var o = { a: 1, b: 2 };
1010
for (var x of Object.values(o)) {
1111
>x : number
1212
>Object.values(o) : number[]
13-
>Object.values : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): T[]; (o: {}): any[]; }
13+
>Object.values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
1414
>Object : ObjectConstructor
15-
>values : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): T[]; (o: {}): any[]; }
15+
>values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
1616
>o : { a: number; b: number; }
1717

1818
let y = x;
1919
>y : number
2020
>x : number
2121
}
2222

23-
var entries = Object.entries(o);
23+
var entries = Object.entries(o); // [string, number][]
2424
>entries : [string, number][]
2525
>Object.entries(o) : [string, number][]
26-
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
26+
>Object.entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
2727
>Object : ObjectConstructor
28-
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
28+
>entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
2929
>o : { a: number; b: number; }
3030

31-
var entries1 = Object.entries(1);
31+
var values = Object.values(o); // number[]
32+
>values : number[]
33+
>Object.values(o) : number[]
34+
>Object.values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
35+
>Object : ObjectConstructor
36+
>values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
37+
>o : { a: number; b: number; }
38+
39+
var entries1 = Object.entries(1); // [string, any][]
3240
>entries1 : [string, any][]
3341
>Object.entries(1) : [string, any][]
34-
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
42+
>Object.entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
3543
>Object : ObjectConstructor
36-
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
44+
>entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
3745
>1 : 1
3846

39-
var entries2 = Object.entries({a: true, b: 2})
47+
var values1 = Object.values(1); // any[]
48+
>values1 : any[]
49+
>Object.values(1) : any[]
50+
>Object.values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
51+
>Object : ObjectConstructor
52+
>values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
53+
>1 : 1
54+
55+
var entries2 = Object.entries({ a: true, b: 2 }); // [string, number|boolean][]
4056
>entries2 : [string, number | boolean][]
41-
>Object.entries({a: true, b: 2}) : [string, number | boolean][]
42-
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
57+
>Object.entries({ a: true, b: 2 }) : [string, number | boolean][]
58+
>Object.entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
4359
>Object : ObjectConstructor
44-
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
45-
>{a: true, b: 2} : { a: boolean; b: number; }
60+
>entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
61+
>{ a: true, b: 2 } : { a: boolean; b: number; }
4662
>a : boolean
4763
>true : true
4864
>b : number
4965
>2 : 2
5066

51-
var entries3 = Object.entries({})
67+
var values2 = Object.values({ a: true, b: 2 }); // (number|boolean)[]
68+
>values2 : (number | boolean)[]
69+
>Object.values({ a: true, b: 2 }) : (number | boolean)[]
70+
>Object.values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
71+
>Object : ObjectConstructor
72+
>values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
73+
>{ a: true, b: 2 } : { a: boolean; b: number; }
74+
>a : boolean
75+
>true : true
76+
>b : number
77+
>2 : 2
78+
79+
var entries3 = Object.entries({}); // [string, {}][]
5280
>entries3 : [string, {}][]
5381
>Object.entries({}) : [string, {}][]
54-
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
82+
>Object.entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
5583
>Object : ObjectConstructor
56-
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
84+
>entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
5785
>{} : {}
5886

87+
var values3 = Object.values({}); // {}[]
88+
>values3 : {}[]
89+
>Object.values({}) : {}[]
90+
>Object.values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
91+
>Object : ObjectConstructor
92+
>values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
93+
>{} : {}
94+
95+
var a = ["a", "b", "c"];
96+
>a : string[]
97+
>["a", "b", "c"] : string[]
98+
>"a" : "a"
99+
>"b" : "b"
100+
>"c" : "c"
101+
102+
var entries4 = Object.entries(a); // [string, string][]
103+
>entries4 : [string, string][]
104+
>Object.entries(a) : [string, string][]
105+
>Object.entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
106+
>Object : ObjectConstructor
107+
>entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
108+
>a : string[]
109+
110+
var values4 = Object.values(a); // string[]
111+
>values4 : string[]
112+
>Object.values(a) : string[]
113+
>Object.values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
114+
>Object : ObjectConstructor
115+
>values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
116+
>a : string[]
117+
118+
enum E { A, B }
119+
>E : E
120+
>A : E.A
121+
>B : E.B
122+
123+
var entries5 = Object.entries(E); // [string, any][]
124+
>entries5 : [string, any][]
125+
>Object.entries(E) : [string, any][]
126+
>Object.entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
127+
>Object : ObjectConstructor
128+
>entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
129+
>E : typeof E
130+
131+
var values5 = Object.values(E); // any[]
132+
>values5 : any[]
133+
>Object.values(E) : any[]
134+
>Object.values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
135+
>Object : ObjectConstructor
136+
>values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
137+
>E : typeof E
138+
139+
interface I { }
140+
>I : I
141+
142+
var i: I = {};
143+
>i : I
144+
>I : I
145+
>{} : {}
146+
147+
var entries6 = Object.entries(i); // [string, any][]
148+
>entries6 : [string, any][]
149+
>Object.entries(i) : [string, any][]
150+
>Object.entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
151+
>Object : ObjectConstructor
152+
>entries : { <T>(o: { [s: string]: T; } | ArrayLike<T>): [string, T][]; (o: {}): [string, any][]; }
153+
>i : I
154+
155+
var values6 = Object.values(i); // any[]
156+
>values6 : any[]
157+
>Object.values(i) : any[]
158+
>Object.values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
159+
>Object : ObjectConstructor
160+
>values : { <T>(o: { [s: string]: T; } | ArrayLike<T>): T[]; (o: {}): any[]; }
161+
>i : I
162+

0 commit comments

Comments
 (0)