File tree 1 file changed +14
-5
lines changed
1 file changed +14
-5
lines changed Original file line number Diff line number Diff line change @@ -116,20 +116,29 @@ export class Random {
116
116
return arrayCopy . slice ( min ) ;
117
117
}
118
118
119
- // TODO @Shinigami 92 2022-01-28: This function needs types
120
119
/**
121
120
* Takes an object and returns a random key or value.
122
121
*
123
122
* @method faker.random.objectElement
124
123
* @param object
125
124
* @param field
126
125
*/
127
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
128
- objectElement ( object : any = { foo : 'bar' , too : 'car' } , field ?: string ) {
129
- const array = Object . keys ( object ) ;
126
+ objectElement < T extends Record < string , unknown > , K extends keyof T > (
127
+ object : T ,
128
+ field : 'key'
129
+ ) : K ;
130
+ objectElement < T extends Record < string , unknown > , K extends keyof T > (
131
+ object : T ,
132
+ field ?: unknown
133
+ ) : T [ K ] ;
134
+ objectElement < T extends Record < string , unknown > , K extends keyof T > (
135
+ object = { foo : 'bar' , too : 'car' } as unknown as T ,
136
+ field = 'value'
137
+ ) : K | T [ K ] {
138
+ const array : Array < keyof T > = Object . keys ( object ) ;
130
139
const key = this . faker . random . arrayElement ( array ) ;
131
140
132
- return field === 'key' ? key : object [ key ] ;
141
+ return field === 'key' ? ( key as K ) : ( object [ key ] as T [ K ] ) ;
133
142
}
134
143
135
144
/**
You can’t perform that action at this time.
0 commit comments