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];
}
}
这是我的生成器函数:
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];
}
}