I have a method produce
with the following signature:
interface ProduceConditions {
[key: string]: Function|Promise<any>;
}
produce(conditions: ProduceConditions, input: any): Promise<object>|object;
The thing is that the returned (resolved) object has the same keys as the conditions
object.
No, JavaScript objects cannot have duplicate keys. The keys must all be unique.
The keyof type operatorThe keyof operator takes an object type and produces a string or numeric literal union of its keys. The following type P is the same type as “x” | “y”: type Point = { x : number; y : number }; type P = keyof Point ; type P = keyof Point.
Use the keyof typeof syntax to create a type from an object's keys, e.g. type Keys = keyof typeof person . The keyof typeof syntax returns a type that represents all of the object's keys as strings.
If I understand what you're asking correctly, your input conditions
will be an implementation of ProduceConditions
with some set of keys, and the return value (whether or not wrapped in a promise) will have the same keys but with the values all resolved.
In which case, the signature you're looking for would be something like:
produce<T extends ProduceConditions, U extends { [key in keyof T]: any }>(conditions: T, input: any): Promise<U> | U
Here I've used two generic types to represent the input and the output, with the requirement that the input type T
meets the definition of ProduceConditions
and the output type U
has the same keys as T
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With