Is this possible in Typescript?
I want to turn eg something like this:
interface IPromiseObject {
promiseA: Promise<number>;
promiseB: Promise<string>;
}
Into this:
interface IResolvedPromiseObject {
promiseA: number;
promiseB: string;
}
I want to use it to resolve an object with promises as values, but still stay type safe. In this example, I need to convert IPromiseObject
to an object with the same keys but the values resolved so that I can use it as return type.
export async function resolveAllObject<IPromiseObject>( promiseObject: IPromiseObject ): Promise<???> {
const resolvedPromiseObject = {};
for ( const key in promiseObject ) {
const value = await promiseObject[ key ];
Object.assign( resolvedPromiseObject, { [ key ]: value } );
}
return resolvedPromiseObject;
}
You can map over the properties and use the Awaited
utility type to extract the type inside the Promise.
type AwaitedObject<T> = {
[K in keyof T]: Awaited<T[K]>
}
Usage:
interface IPromiseObject {
promiseA: Promise<number>;
promiseB: Promise<string>;
}
type AwaitedObject<T> = {
[K in keyof T]: Awaited<T[K]>
}
type IResolvedPromiseObject = AwaitedObject<IPromiseObject>
// type IResolvedPromiseObject = {
// promiseA: number;
// promiseB: string;
// }
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.