web-dev-qa-db-fra.com

La propriété 'matchAll' n'existe pas sur le type 'chaîne'

Je veux appliquer l'expression Reg sur la chaîne. Afin d'obtenir tous les résultats des groupes, j'utilise la méthode matchAll. Voici mon code

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

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

lors de la compilation du code ci-dessus, j'ai une erreur

La propriété 'matchAll' n'existe pas sur le type '"babyfoot, baby-foot"' '

lors de la recherche de cette erreur, j'ai trouvé un problème similaire sur stackoverflow

TS2339: La propriété 'includes' n'existe pas sur le type 'string'

J'ai changé la configuration de tsconfig comme mentionné dans le lien ci-dessus mais mon problème n'a pas été résolu

Voici mon code 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

Vérification de la signature ts pour les classes String et RegExp J'ai réalisé qu'il n'y avait pas de signature pour matchAll. Une façon de le résoudre pourrait être:

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

Une autre façon serait d'ajouter la méthode à lib.es5.d.ts fichier enter image description here

3
Sergio Escudero

String.prototype.matchAll () fait partie de la spécification ECMAScript 2020 (draft). Dans TypeScript, vous pouvez inclure ces fonctionnalités de bibliothèque en ajoutant es2020 ou es2020.string, dans les options du compilateur:

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