Typescript 无法识别 yield 关键字在生成器函数或生成器主体中

Typescript not recognizing that yield keyword is in a generator function or generator body

这是我的生成器函数:

function* generatorFunction(input: number[]): IterableIterator<number> {
  input.forEach((num) => {
    yield num;
  });

这是 linting 错误:

A 'yield' expression is only allowed in a generator body.ts(1163)

打字稿期望什么?

附加信息:

打字稿版本

"typescript": "^4.2.3"
"@typescript-eslint/eslint-plugin": "^4.19.0",
"@typescript-eslint/parser": "^4.19.0",

tsconfig.json

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "moduleResolution": "node",
    "declaration": true,
    "strict": true,
    "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */,
    "strictNullChecks": true /* Enable strict null checks. */,
    "strictFunctionTypes": true /* Enable strict checking of function types. */,
    "noUnusedLocals": true /* Report errors on unused locals. */,
    "noUnusedParameters": true /* Report errors on unused parameters. */,
    "noImplicitReturns": true /* Report error when not all code paths in function return a value. */,
    "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */,
    "importHelpers": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "experimentalDecorators": true,
    "sourceMap": true,
    "outDir": "./dist/tsc/",
    "types": [
      "node",
      "jest"
    ],
    "lib": [
      "ES6",
      "DOM"
    ]
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules",
    "**/*.test.ts"
  ]
}

无法识别 yield 的原因是您在非生成器函数内调用 yield。重要的是要意识到您没有在此函数中调用 yield。

function* generatorFunction(input: number[]): IterableIterator<number> {
 }

而是在这个函数中调用 yield

(num) => {
   
}

由于此函数不是生成器函数,因此您会收到该错误。

要解决此问题,请使用循环而不是数组迭代器函数。

代码应该看起来像这样

function* generatorFunction(input: number[]): IterableIterator<number> {
  for(let i = 0; i < input.length; i++){
     yield input[i];
  }
}