【问题标题】:TypeScript: Type Mapping resolver object to result typesTypeScript:类型映射解析器对象到结果类型
【发布时间】:2020-03-30 11:50:16
【问题描述】:

如果我有这样的界面:

interface GetDomainInfoResolver {
  getDomainInfo: (domain: string) => Promise<DomainInfoType>
}

我如何创建一个映射类型,它会产生这样的接口/类型:

interface GetDomainInfoService {
  getDomainInfo: DomainInfoType
}

这样我就可以这样使用它了:

type GetDomainInfoService = Transform<GetDomainInfoResolver>

这可能吗?

背景是我想在我的 GraphQL 服务器解析器 (TypeGraphQL) 和我的客户端 (@apollo/react-hooks) 之间创建一个类型接口。

非常感谢。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    您可以使用映射类型来映射属性并使用条件类型获取返回类型(使用ReturnType&lt;T[P]&gt;)以提取承诺值类型:

    interface GetDomainInfoResolver {
      getDomainInfo: (domain: string) => Promise<DomainInfoType>
    }
    
    type GetAllResults<T extends Record<keyof T, (...a: any[]) => any>> = {
        [P in keyof T]: ReturnType<T[P]> extends Promise<infer U> ? U : never
    }
    
    type GetDomainInfoService = GetAllResults<GetDomainInfoResolver>
    // Same as
    // type GetDomainInfoService = {
    //     getDomainInfo: DomainInfoType;
    // }
    

    Playground Link

    【讨论】:

    • 非常感谢!在挣扎了两个小时之后,你拯救了我的一天。
    猜你喜欢
    • 2018-04-04
    • 2020-11-25
    • 2021-02-09
    • 1970-01-01
    • 2021-03-28
    • 2021-10-24
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多