Свойство 'matchAll' не существует для типа 'строка' - PullRequest
4 голосов
/ 03 апреля 2019

Я хочу применить выражение 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: свойство 'include' не существует для типа '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"
]
}
}

1 Ответ

3 голосов
/ 03 апреля 2019

matchAll не является методом из класса string, он из класса RegExp, поэтому, если вы хотите использовать метод, вы просто передаете строку в качестве параметров вместо передачи Переменная RegExp. В вашем случае

regexp.matchAll(str)

Больше информации в документации MDN

EDIT: Я не читал прототип строки, теперь, прочитав ее, я понял вашу проблему. Проверяя подпись ts для классов String и RegExp, я понял, что для matchAll подписи нет. Один из способов решить это может быть:

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

Другой способ - добавить метод в файл lib.es5.d.ts. enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...