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

如何在TypeScript中获取泛型类型的内部类型?

提取TypeScript泛型类型的内部参数

这个场景我太熟悉了!想要从Observable<XXX>里把XXX掏出来,用TypeScript的条件类型推断(也就是infer关键字)就能轻松解决,不用绕弯路。

具体步骤:

  1. 先定义一个通用的工具类型,专门用来解开Observable的包裹:
// 工具类型:如果传入的是Observable<U>,就返回内部的U;否则返回原类型(做容错)
type UnwrapObservable<T> = T extends Observable<infer U> ? U : T;

这里的infer U就是告诉TypeScript:“帮我推断出Observable里面的那个类型,给它起个名字叫U”,然后我们直接返回U就行。

  1. 结合你已有的代码,把ReturnType的结果传给这个工具类型:
// 先拿到myMethod的返回类型(Observable<{ prop1: string, ... }>)
type myClassReturn = ReturnType<MyClass['myMethod']>;
// 再提取内部类型
type MyMethodInnerType = UnwrapObservable<myClassReturn>;

当然你也可以把两步合并成一行,省得单独定义myClassReturn:

type MyMethodInnerType = UnwrapObservable<ReturnType<MyClass['myMethod']>>;

拓展一下:

这个思路适用于所有泛型类型,比如你想提取Promise的返回值、Array的元素类型,都可以照葫芦画瓢:

  • 解开Promise:
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
  • 解开Array:
type ArrayElement<T> = T extends Array<infer U> ? U : T;

这样以后遇到类似的泛型拆包需求,都可以用这个方法解决~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:17:28