TypeScript报错ts(1163):无法识别生成器函数内的yield关键字如何解决?
报错根本原因
你遇到的A 'yield' expression is only allowed in a generator body.ts(1163)报错是ECMAScript和TypeScript对生成器函数的统一强制规则,和你当前的依赖版本、tsconfig配置没有关联。
规则核心要求很明确:yield关键字只能直接出现在用function*语法声明的生成器函数的直接作用域内,不能出现在该生成器内部嵌套的普通函数、箭头函数中。
你代码里的yield写在了forEach的回调箭头函数里,这个箭头函数是普通函数,不是带*声明的生成器函数,自然不符合规则要求,因此触发报错。
修复方案
直接把forEach遍历换成普通的for...of循环即可,保证yield处于生成器函数的直接作用域中:
function* generatorFunction(input: number[]): IterableIterator<number> { for (const num of input) { yield num; } }
不推荐强行给forEach的回调加生成器声明,因为数组的forEach方法本身没有对生成器回调的执行支持,写了也不会正常迭代生效,用普通循环是最高效清晰的写法。
内容的提问来源于stack exchange,提问作者NicoWheat
相关产品推荐
相关产品推荐

