如果我有这样的界面:
interface GetDomainInfoResolver {
getDomainInfo: (domain: string) => Promise<DomainInfoType>
}
我如何创建一个映射类型,以产生如下所示的接口/类型:
interface GetDomainInfoService {
getDomainInfo: DomainInfoType
}
这样我就可以这样使用它:
type GetDomainInfoService = Transform<GetDomainInfoResolver>
这有可能吗?
背景是我想在GraphQL服务器解析器(TypeGraphQL)和客户端(@ apollo / react-hooks)之间创建类型接口。
非常感谢您。
答案 0 :(得分:3)
您可以使用映射类型来映射属性,并使用条件类型获取返回类型(使用ReturnType<T[P]>
)以提取承诺值类型:
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;
// }