web-dev-qa-db-ja.com

プロパティ 'matchAll'はタイプ 'string'に存在しません

文字列に正規表現を適用したい。すべてのグループの結果を取得するために、私は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'はタイプ '"table football、foosball"'に存在しません

このエラーについて検索中に、stackoverflowで同様の問題を見つけました

TS2339:プロパティ 'includes'はタイプ '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"
]
}
}
17
Yousuf

StringおよびRegExpクラスのts署名を確認すると、matchAllの署名がないことに気付きました。それを解決する1つの方法は次のとおりです。

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

別の方法は、lib.es5.d.tsファイルにメソッドを追加することです enter image description here

3
Sergio Escudero

String.prototype.matchAll() はECMAScript 2020仕様(ドラフト)の一部です。 TypeScriptでは、コンパイラオプションにes2020またはes2020.stringを追加して、これらのライブラリ機能を含めることができます。

"compilerOptions": {
    "lib": ["es2020.string"]
}
21
mvr