I have a method
produce
interface ProduceConditions {
[key: string]: Function|Promise<any>;
}
produce(conditions: ProduceConditions, input: any): Promise<object>|object;
conditions
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
.