You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将TypeScript对象类型映射为Promise解析值类型?

解决方案:提取Promise解析值的映射类型

当然可以实现这个需求!TypeScript的类型系统正好有对应的工具,能帮你把对象里每个方法返回的Promise类型,转换成它们的解析值类型。

步骤1:定义通用映射类型

我们可以创建一个通用的类型工具,它会遍历对象的所有键,提取每个方法返回Promise的解析值:

export type UnwrapPromiseValues<T> = {
  [K in keyof T]: Awaited<ReturnType<T[K]>>;
};

让我们拆解一下这个类型的作用:

  • [K in keyof T]:遍历传入类型T的所有属性键
  • ReturnType<T[K]>:获取每个属性(也就是你的方法a()/b()/c())的返回类型,也就是Promise<X>、Promise<Y>这类
  • Awaited<...>:TypeScript内置的工具类型,专门用来提取Promise的解析值,把Promise<X>转换成X

步骤2:应用到你的对象上

接下来只需要把这个工具类型用到你的对象v上,通过typeof v获取它的类型:

export const v = { 
  a(): Promise<X> { /* ... */ }, 
  b(): Promise<Y> { /* ... */ }, 
  c(): Promise<Z> { /* ... */ } 
};

export type V = UnwrapPromiseValues<typeof v>;

现在V的类型就完全符合你的需求:{ a: X, b: Y, c: Z }

兼容旧版TypeScript(4.5之前)

如果你使用的是TypeScript 4.5之前的版本(还没有内置Awaited),可以自己实现一个简单的解析工具:

// 自定义Promise解析类型
type Unwrap<T> = T extends Promise<infer U> ? U : T;

export type UnwrapPromiseValues<T> = {
  [K in keyof T]: Unwrap<ReturnType<T[K]>>;
};

这个自定义的Unwrap类型通过条件类型推断,同样能把Promise<U>转换成U。

内容的提问来源于stack exchange,提问作者user7898461

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:28:17