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

TypeScript中保留泛型类型封装函数的最优实现方案是什么?

解决方案

可以直接通过 TypeScript 内置的类型推导+typeof 关键字实现泛型透传,不需要重复声明泛型:

const func = <T, K>(a: T, b: object) => {
  // 原函数逻辑
};

// 直接将 wrappedFunc 类型标注为 typeof func,TS 会自动透传泛型声明
const wrappedFunc: typeof func = (a, b) => {
  return func(a, {name: 'john', ...b});
};

这种方式会完整继承原函数的泛型签名、参数类型、返回值类型,后续如果原函数的泛型约束、参数结构有调整,wrappedFunc的类型会自动同步,不需要手动维护,避免了重复声明带来的类型不一致隐患。


如果你的封装场景需要调整参数结构(比如新增/删除参数、修改参数可选性),可以配合Parameters和ReturnType工具类型实现:

type FuncType = typeof func;

// 示例:把第二个参数调整为可选参数
const wrappedFunc = <T, K>(a: T, b?: Parameters<FuncType<T, K>>[1]): ReturnType<FuncType<T, K>> => {
  return func(a, {name: 'john', ...(b ?? {})});
};

效果验证

泛型能力会完全保留,类型校验正常生效:

// 传入泛型参数后,参数和返回值都会正常校验
const result = wrappedFunc<number, {id: string}>(123, {age: 20});
// 推导 result 类型为 {id: string},第一个参数校验为number类型,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:39:00