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
相关产品推荐
相关产品推荐

