属性“ matchAll”在“字符串”类型上不存在

时间:2019-04-03 16:03:19

标签: typescript angular7

我想对字符串应用Reg表达式。为了获得所有组的结果,我使用matchAll方法。这是我的代码

const regexp = RegExp('foo*','g'); 
const str = "table football, foosball";
let matches = str.matchAll(regexp);

for (const match of matches) {
   console.log(match);
}

在上面的代码编译期间我出错了

  

类型““桌上足球,桌上足球”不存在属性'matchAll'

在搜索此错误期间,我在stackoverflow上发现了类似的问题

TS2339: Property 'includes' does not exist on type 'string'

我更改了上面链接中提到的tsconfig配置,但是我的问题没有解决

这是我的tsconfig代码;

{
 "compileOnSave": false,
 "compilerOptions": {
 "baseUrl": "./",
 "importHelpers": true,
 "outDir": "./dist/out-tsc",
 "sourceMap": true,
 "declaration": false,
 "module": "es2015",
 "moduleResolution": "node",
 "emitDecoratorMetadata": true,
 "experimentalDecorators": true,
 "target": "es2016",
 "typeRoots": [
  "node_modules/@types"
 ],
"lib": [
  "es2018",
  "dom"
]
}
}

2 个答案:

答案 0 :(得分:16)

String.prototype.matchAll()是ECMAScript 2020规范(草稿)的一部分。 在TypeScript中,您可以通过在编译器选项中添加SSLes2020来包括这些库功能:

es2020.string

答案 1 :(得分:2)

matchAll不是string类的方法,而是RegExp类的方法,因此,如果要使用该方法,只需将字符串作为参数传递而不是传递RegExp变量。就您而言

regexp.matchAll(str)

MDN documenation

中的更多信息

编辑: 我没有读过字符串原型,现在我读了它,我意识到您的问题。检查StringRegExp类的ts签名,我意识到matchAll没有签名。一种解决方法是:

let matches = str['matchAll'](regexp);

另一种方法是将该方法添加到lib.es5.d.ts文件中 enter image description here