¿Es esto posible en Typescript?
Quiero convertir, por ejemplo, algo como esto:
interface IPromiseObject { promiseA: Promise<number>; promiseB: Promise<string>; }Dentro de esto:
interface IResolvedPromiseObject { promiseA: number; promiseB: string; } Quiero usarlo para resolver un objeto con promesas como valores, pero aún mantengo el tipo seguro. En este ejemplo, necesito convertir IPromiseObject en un objeto con las mismas claves pero los valores resueltos para poder usarlo como tipo de devolución.
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; }Puede mapear las propiedades y usar el tipo de utilidad Awaited para extraer el tipo dentro de la Promesa.
type AwaitedObject<T> = { [K in keyof T]: Awaited<T[K]> }Uso:
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; // }