Skip to content

Commit 39dfeb0

Browse files
Andymhegazy
Andy
authored andcommitted
Add stricter parameter types for Object.values and Object.entries (#20553)
* Add stricter parameter types for Object.values and Object.entries * Use mapped type and constrain 'T extends object' * Revert everything but change to parameter types
1 parent 2869657 commit 39dfeb0

6 files changed

+36
-36
lines changed

src/lib/es2017.object.d.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ interface ObjectConstructor {
99
* Returns an array of values of the enumerable properties of an object
1010
* @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.
1111
*/
12-
values(o: any): any[];
12+
values(o: {}): any[];
1313

1414
/**
1515
* Returns an array of key/values of the enumerable properties of an object
@@ -21,7 +21,7 @@ interface ObjectConstructor {
2121
* Returns an array of key/values of the enumerable properties of an object
2222
* @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.
2323
*/
24-
entries(o: any): [string, any][];
24+
entries(o: {}): [string, any][];
2525

2626
/**
2727
* Returns an object containing all own property descriptors of an object

tests/baselines/reference/useObjectValuesAndEntries1.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ for (var x of Object.values(o)) {
55
let y = x;
66
}
77

8-
var entries = Object.entries(o); // <-- entries: ['a' | 'b', number][]
9-
var entries1 = Object.entries(1); // <-- entries: [string, any][]
10-
var entries2 = Object.entries({a: true, b: 2}) // ['a' | 'b', number | boolean][]
11-
var entries3 = Object.entries({}) // [never, any][]
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({})
1212

1313

1414
//// [useObjectValuesAndEntries1.js]
@@ -17,7 +17,7 @@ for (var _i = 0, _a = Object.values(o); _i < _a.length; _i++) {
1717
var x = _a[_i];
1818
var y = x;
1919
}
20-
var entries = Object.entries(o); // <-- entries: ['a' | 'b', number][]
21-
var entries1 = Object.entries(1); // <-- entries: [string, any][]
22-
var entries2 = Object.entries({ a: true, b: 2 }); // ['a' | 'b', number | boolean][]
23-
var entries3 = Object.entries({}); // [never, any][]
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({});

tests/baselines/reference/useObjectValuesAndEntries1.symbols

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,28 @@ for (var x of Object.values(o)) {
1616
>x : Symbol(x, Decl(useObjectValuesAndEntries1.ts, 2, 8))
1717
}
1818

19-
var entries = Object.entries(o); // <-- entries: ['a' | 'b', number][]
19+
var entries = Object.entries(o);
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); // <-- entries: [string, any][]
26+
var entries1 = Object.entries(1);
2727
>entries1 : Symbol(entries1, Decl(useObjectValuesAndEntries1.ts, 7, 3))
2828
>Object.entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
2929
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
3030
>entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
3131

32-
var entries2 = Object.entries({a: true, b: 2}) // ['a' | 'b', number | boolean][]
32+
var entries2 = Object.entries({a: true, b: 2})
3333
>entries2 : Symbol(entries2, Decl(useObjectValuesAndEntries1.ts, 8, 3))
3434
>Object.entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
3535
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
3636
>entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
3737
>a : Symbol(a, Decl(useObjectValuesAndEntries1.ts, 8, 31))
3838
>b : Symbol(b, Decl(useObjectValuesAndEntries1.ts, 8, 39))
3939

40-
var entries3 = Object.entries({}) // [never, any][]
40+
var entries3 = Object.entries({})
4141
>entries3 : Symbol(entries3, Decl(useObjectValuesAndEntries1.ts, 9, 3))
4242
>Object.entries : Symbol(ObjectConstructor.entries, Decl(lib.es2017.object.d.ts, --, --), Decl(lib.es2017.object.d.ts, --, --))
4343
>Object : Symbol(Object, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))

tests/baselines/reference/useObjectValuesAndEntries1.types

+14-14
Original file line numberDiff line numberDiff line change
@@ -10,49 +10,49 @@ 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): any[]; }
13+
>Object.values : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): T[]; (o: {}): any[]; }
1414
>Object : ObjectConstructor
15-
>values : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): T[]; (o: any): any[]; }
15+
>values : { <T>(o: { [s: string]: T; } | { [n: number]: 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); // <-- entries: ['a' | 'b', number][]
23+
var entries = Object.entries(o);
2424
>entries : [string, number][]
2525
>Object.entries(o) : [string, number][]
26-
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: any): [string, any][]; }
26+
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
2727
>Object : ObjectConstructor
28-
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: any): [string, any][]; }
28+
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
2929
>o : { a: number; b: number; }
3030

31-
var entries1 = Object.entries(1); // <-- entries: [string, any][]
31+
var entries1 = Object.entries(1);
3232
>entries1 : [string, any][]
3333
>Object.entries(1) : [string, any][]
34-
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: any): [string, any][]; }
34+
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
3535
>Object : ObjectConstructor
36-
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: any): [string, any][]; }
36+
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
3737
>1 : 1
3838

39-
var entries2 = Object.entries({a: true, b: 2}) // ['a' | 'b', number | boolean][]
39+
var entries2 = Object.entries({a: true, b: 2})
4040
>entries2 : [string, number | boolean][]
4141
>Object.entries({a: true, b: 2}) : [string, number | boolean][]
42-
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: any): [string, any][]; }
42+
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
4343
>Object : ObjectConstructor
44-
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: any): [string, any][]; }
44+
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
4545
>{a: true, b: 2} : { a: boolean; b: number; }
4646
>a : boolean
4747
>true : true
4848
>b : number
4949
>2 : 2
5050

51-
var entries3 = Object.entries({}) // [never, any][]
51+
var entries3 = Object.entries({})
5252
>entries3 : [string, {}][]
5353
>Object.entries({}) : [string, {}][]
54-
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: any): [string, any][]; }
54+
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
5555
>Object : ObjectConstructor
56-
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: any): [string, any][]; }
56+
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
5757
>{} : {}
5858

tests/baselines/reference/useObjectValuesAndEntries4.types

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ 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): any[]; }
13+
>Object.values : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): T[]; (o: {}): any[]; }
1414
>Object : ObjectConstructor
15-
>values : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): T[]; (o: any): any[]; }
15+
>values : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): T[]; (o: {}): any[]; }
1616
>o : { a: number; b: number; }
1717

1818
let y = x;
@@ -23,8 +23,8 @@ for (var x of Object.values(o)) {
2323
var entries = Object.entries(o);
2424
>entries : [string, number][]
2525
>Object.entries(o) : [string, number][]
26-
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: any): [string, any][]; }
26+
>Object.entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
2727
>Object : ObjectConstructor
28-
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: any): [string, any][]; }
28+
>entries : { <T>(o: { [s: string]: T; } | { [n: number]: T; }): [string, T][]; (o: {}): [string, any][]; }
2929
>o : { a: number; b: number; }
3030

tests/cases/conformance/es2017/useObjectValuesAndEntries1.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ for (var x of Object.values(o)) {
77
let y = x;
88
}
99

10-
var entries = Object.entries(o); // <-- entries: ['a' | 'b', number][]
11-
var entries1 = Object.entries(1); // <-- entries: [string, any][]
12-
var entries2 = Object.entries({a: true, b: 2}) // ['a' | 'b', number | boolean][]
13-
var entries3 = Object.entries({}) // [never, any][]
10+
var entries = Object.entries(o);
11+
var entries1 = Object.entries(1);
12+
var entries2 = Object.entries({a: true, b: 2})
13+
var entries3 = Object.entries({})

0 commit comments

Comments
 (0)