首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型记录-将“带有承诺的对象作为属性”-Type转换为“具有解析承诺值的对象作为属性”-Type

类型记录-将“带有承诺的对象作为属性”-Type转换为“具有解析承诺值的对象作为属性”-Type
EN

Stack Overflow用户
提问于 2022-06-09 14:47:56
回答 1查看 46关注 0票数 1

这在打字稿中有可能吗?

我想转一转,例如这样的事情:

代码语言:javascript
复制
interface IPromiseObject {
    promiseA: Promise<number>;
    promiseB: Promise<string>;
}

这方面:

代码语言:javascript
复制
interface IResolvedPromiseObject {
    promiseA: number;
    promiseB: string;
}

我想使用它来解析一个以许诺作为值的对象,但仍然保持类型安全。在本例中,我需要将IPromiseObject转换为具有相同键但解析的值的对象,以便可以将其用作返回类型。

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-09 14:50:43

您可以映射属性,并使用Awaited实用程序类型提取承诺中的类型。

代码语言:javascript
复制
type AwaitedObject<T> = {
  [K in keyof T]: Awaited<T[K]>
}

用法:

代码语言:javascript
复制
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;
// }

游乐场

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72562388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档