TypeScript和Iterator:类型'IterableIterator <T>'不是数组类型

kec*_*hol 32 typescript

当我在TypeScript上使用yield*表达式时,它总是会出错.

类型'IterableIterator'不是数组类型.

如何正确设置类型而不使用any以避免错误?

function* g1(): IterableIterator<number> {
  yield 2;
  yield 3;
  yield 4;
}

function* g2(): IterableIterator<number> {
  yield 1;
  // ERROR: Type 'IterableIterator<number>' is not an array type.
  yield* g1();
  yield 5;
}

const iterator = g2();
Run Code Online (Sandbox Code Playgroud)

Tit*_*mir 54

如果您以es5为目标,则需要在tsconfig中显式启用向下级迭代:

{
    "compilerOptions": {
        "target": "es5",
        "downlevelIteration": true
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 是否有默认情况下不存在的原因? (6认同)
  • @Ben我记得在一些GitHub问题中读到,团队对生成的代码是UGLY并且不真正适合生成可读JS的TS设计目标的事实并不特别高兴. (5认同)
  • 讽刺!老派的 `for (let i = 0; i &lt; arr.length; i++)` 比任何(这些炫耀的)`for-of` 数组都具有可读性:) (4认同)
  • 如果您使用 VSC,只需重新启动它即可使更改生效 (4认同)
  • @Kariamoss 是的,不幸的是有时需要重述。“重新启动 ts 服务器”命令也是重新启动 ts 语言服务的好选择 (2认同)