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

TypeScript如何提取泛型参数?实现自定义GenericType工具类型

TypeScript泛型参数提取实现方案

TypeScript 没有提供可直接提取任意泛型参数的通用内置工具类型,可基于TS原生的infer条件类型推断特性,自行实现符合需求的GenericType工具类型。

工具类型实现与示例验证

针对数组、Promise两类常用泛型场景,可按如下方式定义GenericType:

type GenericType<T> =
  // 提取数组元素类型
  T extends Array<infer Item> ? Item :
  // 提取Promise resolve返回值类型
  T extends Promise<infer Res> ? Res :
  never;

效果验证:

const foo = ['foo']
type MyStringType = GenericType<typeof foo> // 推导结果为string,符合预期

let bar: Promise<number>
type MyNumberType = GenericType<typeof bar> // 推导结果为number,符合预期

jest-axe类型问题适配

使用jest-axe时触发的TS2503: Cannot find namespace 'axe'报错,本质是库的类型定义未暴露axe全局命名空间。无法直接导入AxeResults类型时,前述工具类型可直接解决问题:
axe方法执行后的返回值类型为Promise<AxeResults>,ReturnType<typeof axe>会得到Promise<AxeResults>,套一层GenericType即可直接提取出目标AxeResults类型,无需依赖命名空间导入。

如果后续需要提取其他泛型结构的类型参数(比如Map、自定义泛型类等),只需要在GenericType的条件分支里追加对应规则即可,例如要提取Map的值类型,可新增分支T extends Map<any, infer Value> ? Value。TS不存在能适配所有泛型结构的万能参数提取工具,按需扩展分支即可覆盖绝大多数使用场景。

问题参考截图

问题截图1
问题截图2


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:57:26