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

如何在TypeScript中转换类所有函数返回类型并保留泛型?

可行,用TypeScript工具类型实现返回类型转换

你可以通过映射类型结合条件类型实现这个需求,自动将类中所有函数的返回类型从CustomPromise<T>转换为Promise<T>,同时完整保留原函数的参数定义和泛型特性。

具体实现代码

class CustomPromise<T> extends Promise<T> {
  customData: string;
}

interface RespSomething {
  data: string;
}

interface RespWhatever {
  data: number;
}

class MyService {
  something(req: { x: string; y: string }): CustomPromise<RespSomething> {
    return new CustomPromise<RespSomething>((res, req) => {});
  }

  whatever(req: { a: string }): CustomPromise<RespWhatever> {
    return new CustomPromise<RespWhatever>((res, req) => {});
  }
}

// 定义通用类型转换工具
type TransformServiceReturn<T> = {
  [K in keyof T]: T[K] extends (...args: infer Args) => CustomPromise<infer U>
    ? (...args: Args) => Promise<U>
    : T[K];
};

// 生成目标类型
type TransformedMyService = TransformServiceReturn<MyService>;

类型工具说明

  • [K in keyof T]:遍历原类型MyService的所有属性(即类中的方法)
  • T[K] extends (...args: infer Args) => CustomPromise<infer U>:判断当前属性是否是返回CustomPromise的函数,通过infer关键字自动提取函数的参数列表Args和CustomPromise的泛型参数U
  • 匹配成功时,返回参数列表完全一致但返回类型为Promise<U>的函数;匹配失败时保留原属性类型

验证示例

你可以通过以下代码验证转换后的类型是否符合预期:

const transformedService: TransformedMyService = {
  something: (req) => Promise.resolve({ data: "hello" }),
  whatever: (req) => Promise.resolve({ data: 456 })
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:35:40