Issue
Sorry this could well be a duplicate as I see lots of similar questions just haven't yet managed to apply those examples to my situation...
Given I call my function loadStuff()
like so:
loadStuff({
dataExample1: loadDataExample1Fn(),
dataExample2: loadDataExample2Fn(),
});
Where:
- There could be 1 to many dynamic keys to data load calls
- The example
loadDataExample1Fn
has signature() => LoadedData<DataExample1>
- The example
loadDataExample2Fn
has signature() => LoadedData<DataExample2>
I want the return type to be:
LoadedData<{ dataExample1: DataExample1, dataExample2: DataExample2 }>
Edit: Added Typescript playground example
Anyone able to point me in the right direction in getting typescript support on the returned result?
Solution
You can indeed! To do this you'll need to make your function generic, and then generate a return type from the inferred generic type using conditional types
const loadStuff = <L extends { [x: string]: LoadedData<any> }>(
loadedDataItems: L
): LoadedData<{
[k in keyof L]: L[k] extends LoadedData<infer D> ? D : never;
}> => {
// Stuff
};
Answered By - Ben Wainwright
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.