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

如何提取异步或同步生成器的内部返回类型?

提取生成器函数的内部返回类型(类似Promise的Awaited工具)

在处理Promise异步函数时,我们可以通过Awaited<ReturnType<typeof foo>>轻松获取函数的实际返回值类型,但对于同步生成器(function*)或异步生成器(async function*),TypeScript并没有内置类似Awaited的工具类型来直接提取其内部返回的类型。

自定义工具类型实现需求

我们可以自己编写一个条件类型来处理同步和异步生成器的情况:

type GeneratorReturnType<T extends Generator | AsyncGenerator> = 
  T extends AsyncGenerator<any, infer R, any> 
    ? Awaited<R> 
    : T extends Generator<any, infer R, any> 
      ? R 
      : never;

使用示例

对应你给出的代码场景,这样就能提取生成器的内部返回类型:

async function* foo() {
  yield 1;
  return "async-result";
}

function* bar() {
  yield 2;
  return "sync-result";
}

// 类型为 string
let asyncReturnValue: GeneratorReturnType<ReturnType<typeof foo>>;
// 类型为 string
let syncReturnValue: GeneratorReturnType<ReturnType<typeof bar>>;
// 联合类型下,类型仍为 string
let combinedReturnValue: GeneratorReturnType<ReturnType<typeof foo | typeof bar>>;

类型逻辑说明

  • 首先判断传入的类型T是否为AsyncGenerator,若是则提取其返回类型参数R,再通过Awaited处理异步生成器返回的Promise<R>,得到实际的返回值类型。
  • 若T是普通的Generator,则直接提取其返回类型参数R即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:32:33