typescript - 什么 AsyncGenerator TypeScript 类型会产生 Promise?

标签 typescript generator iterable

我正在尝试为下面的函数分配一个返回类型:

async function *sleepyNumbers() {  // what TypeScript type is this?
  let n = 0;
  while (true) {
    yield new Promise(resolve => resolve(n++));
    await new Promise(resolve => setTimeout(resolve, 500));
  }
}

(async () => {
  for await (const i of sleepyNumbers())
    console.log(i);
})();


生成器正在生成一个解析为 number 的 Promise。将类型设置为 Promise<number> 失败并显示以下错误消息:

TS2739: Type 'AsyncGenerator' is missing the following properties from type 'Promise': then, catch, [Symbol.toStringTag], finally


Iterable 导致了类似的错误。

我可以将类型设置为 AsyncGenerator 但这还不够具体。此函数的返回类型的正确 TypeScript 语法是什么?

最佳答案

它将是 AsyncGenerator<number, never, void> :
number - next 结果never 返回void - next 没有任何参数

您还需要明确键入一个 promise 解析:
yield new Promise<number>(resolve => resolve(n++));
全部一起:

async function *sleepyNumbers(): AsyncGenerator<number, never, void> {
    let n = 0;
    while (true) {
        yield new Promise<number>(resolve => resolve(n++));
        await new Promise(resolve => setTimeout(resolve, 500));
    }
}

(async () => {
    for await (const i of sleepyNumbers())
        console.log(i);
})();

关于typescript - 什么 AsyncGenerator TypeScript 类型会产生 Promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60681826/

相关文章:

node.js - typescript -创建自定义快速中间件定义

javascript - AngularFirebaseAuth : Calling server api just after firebase auth?

python - “int”对象不可迭代

Angular 动态模板渲染,如 ui 网格单元格模板(在 parent 的 colDefs 中声明的模板)

node.js - 编译 Node App 时出错 - 变量 'Promise' 的类型必须为 'any',但此处的类型为 'PromiseConstructor'

python - 为什么 Python 生成器函数在语法上与 'regular' 函数没有不同的表示法?

python - `yield from` 可以与什么样的对象一起使用?

python - "return"和 "return None"生成器中的行为差异

python - 对带有子列表的可迭代对象的每个元素应用一个函数

python - 从两个数组创建所有可能的组合