2
2
3
3
import { expectType } from "tsd" ;
4
4
5
+ function createGenericRecord < K extends string , V > ( keys : K [ ] , values : V [ ] ) : Record < K , V > {
6
+ return Object . fromEntries ( keys . map ( ( k , i ) => [ k , values [ i ] ! ] as const ) ) ;
7
+ }
8
+
5
9
{
6
- const obj1 = { foo : 123 } ;
10
+ const obj1 : { [ k : string ] : number } = { foo : 123 } ;
7
11
const values1 = Object . values ( obj1 ) ;
8
12
const entries1 = Object . entries ( obj1 ) ;
9
- expectType < unknown [ ] > ( values1 ) ;
10
- expectType < [ string , unknown ] [ ] > ( entries1 ) ;
13
+ expectType < number [ ] > ( values1 ) ;
14
+ expectType < [ string , number ] [ ] > ( entries1 ) ;
11
15
12
16
const obj2 : Record < string , number > = { } ;
13
17
const values2 = Object . values ( obj2 ) ;
@@ -20,6 +24,18 @@ import { expectType } from "tsd";
20
24
const entries3 = Object . entries ( obj3 ) ;
21
25
expectType < string [ ] > ( values3 ) ;
22
26
expectType < [ string , string ] [ ] > ( entries3 ) ;
27
+
28
+ const obj4 = createGenericRecord ( [ "foo" , "bar" , "baz" ] , [ 1 , 2 , 3 ] ) ;
29
+ const values4 = Object . values ( obj4 ) ;
30
+ const entries4 = Object . entries ( obj4 ) ;
31
+ expectType < number [ ] > ( values4 ) ;
32
+ expectType < [ string , number ] [ ] > ( entries4 ) ;
33
+
34
+ const obj5 = createGenericRecord ( [ "foo" , "bar" , "baz" ] , [ 1 , obj1 , 3 ] ) ;
35
+ const values5 = Object . values ( obj5 ) ;
36
+ const entries5 = Object . entries ( obj5 ) ;
37
+ expectType < ( number | { [ k : string ] : number } ) [ ] > ( values5 ) ;
38
+ expectType < [ string , ( number | { [ k : string ] : number } ) ] [ ] > ( entries5 ) ;
23
39
}
24
40
function test < T > ( obj : T ) {
25
41
const values = Object . values ( obj ) ;
0 commit comments