为何IntelliJ代码补全仅提示RegExp.[Symbol.matchAll]而非RegExp.matchAll
出现该现象的核心原因如下:
- ECMAScript 标准本身没有定义
RegExp.matchAll类静态方法或实例方法
ES2020规范中仅存在两类和matchAll相关的合法接口:- 挂载在字符串原型上的
String.prototype.matchAll(regexp),这也是你可以正常调用string.matchAll()的原因 - 挂载在正则原型上的符号方法
RegExp.prototype[Symbol.matchAll](str),该方法设计为供String.prototype.matchAll内部自动调用,也支持手动调用,所以你的/x/[Symbol.matchAll]("axb")可以在Node.js 14环境正常执行
- 挂载在字符串原型上的
- IDE代码补全行为符合预期
IntelliJ的TypeScript代码补全完全基于官方类型定义生成,不存在的API自然不会给出提示。你的tsconfig.json配置中lib和target都设置为es2020,使用的TypeScript 4.3.5也完整支持ES2020的类型定义,所以仅提示RegExp.[Symbol.matchAll]是准确的正常行为。 RegExp.matchAll()调用失败属于合理结果
该API不属于标准定义,运行环境没有对应实现,调用时自然会抛出错误。
内容的提问来源于stack exchange,提问作者TmTron
相关产品推荐
相关产品推荐

