如何在ES6+类中定义异步生成器成员函数?ESLint配置疑问
问题解答
一、纯ES6+类支持异步生成器成员函数吗?
当然支持。异步生成器(async function*)是ES2018纳入标准的特性,Node.js从v10版本开始就已支持,Node18+环境完全兼容该语法。你写的这段代码:
class A { async *mygenerator() {} }
在纯JS环境里是完全合法可运行的,不需要额外转译。
二、ESLint配置:如何阻止该语法被识别为有效(即禁止使用)
如果你的需求是让ESLint把类中的异步生成器成员函数标记为错误(禁止使用该语法),可以通过以下配置实现:
使用no-restricted-syntax规则拦截
在ESLint配置的rules中添加该规则,精准匹配类中的异步生成器方法:
"no-restricted-syntax": [ "error", { "selector": "MethodDefinition[value.type='AsyncGeneratorFunction']", "message": "禁止在类中定义异步生成器成员函数" } ]
配置生效后,只要代码中出现类的异步生成器方法,ESLint就会抛出错误提示。
附:如果是ESLint误报该语法不合法
要是你之前遇到的是ESLint错误判定合法语法为违规的情况,需要调整配置让ESLint认可该语法:
你的当前配置里ecmaVersion已设为2022,本身支持异步生成器,但node/no-unsupported-features/es-syntax规则可能未适配Node18特性。修改该规则:
"node/no-unsupported-features/es-syntax": [ "error", { "ignores": ["modules", "asyncGenerators"], "version": "18.0.0" } ]
指定version: "18.0.0"后,ESLint会按照Node18的特性支持列表做检查,不会再对异步生成器语法报错。
内容的提问来源于stack exchange,提问作者Loopilla
相关产品推荐
相关产品推荐

