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

TypeScript泛型依赖反转:能否通过泛型嵌套指定返回类型?

TypeScript中通过泛型传递实现类型依赖反转

完全可以实现这种类型层面的依赖反转——将泛型类型本身作为参数传入另一个泛型,让后者基于传入的泛型工具推导最终返回类型,这种模式在复杂类型场景中能有效复用代码,避免重复逻辑。

以下是可正常运行的TypeScript实现代码:

// 定义两个类型工具:分别提取函数的返回值和第一个参数类型
type GetTypeA<T extends (arg: any) => unknown> = ReturnType<T>;
type GetTypeB<T extends (arg: any) => unknown> = Parameters<T>[0];

// 通用结构泛型,接受类型工具和目标函数类型作为参数
type Usage<Getter extends <T extends (arg: any) => unknown>(t: T) => unknown, T extends (arg: any) => unknown> = { 
  getter: Getter<T>;
};

// 封装便捷类型,绑定对应的类型工具
type TypeA<T extends (arg: any) => unknown> = Usage<typeof GetTypeA, T>;
type TypeB<T extends (arg: any) => unknown> = Usage<typeof GetTypeB, T>;

// 验证结果
type A = TypeA<(a: string) => number>; // 类型为 { getter: number }
type B = TypeB<(a: string) => number>; // 类型为 { getter: string }

代码说明

  • GetTypeA 和 GetTypeB 是基础类型工具,负责单一的类型提取逻辑;
  • Usage 作为通用容器,将类型工具(Getter)和目标函数类型(T)解耦,只负责定义最终的结构形态,具体的类型提取逻辑由传入的Getter决定;
  • TypeA 和 TypeB 是针对不同类型工具的封装,简化了使用时的调用方式。

这种模式的价值在于,当需要新增类似的类型提取逻辑时,只需要新增一个GetTypeX类型工具,再基于Usage封装出TypeX即可,无需重复编写结构定义,极大减少了代码冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:50:22