reactjs - Tipul 'Set' poate fi iterat doar folosind flagul '--downlevelIteration' sau cu un '--target' de 'es2015' sau mai mare


Încerc să obțin toate ID-urile într-un Array și apoi să elimin duplicatele cu React TypeScript.

Iată codul meu :

const uniqueMuscle = workoutexercices.map((exercice: any) => {
    let exercicesId = exercice.id;
    exercicesId = [...new Set(exercicesId)];
    return exercicesId;
  });

VSCode subliniază cu roșu [...new Set(exercicesId)]; și îmi spune: Tipul 'Set<unknown>' poate fi iterat doar folosind flag-ul '--downlevelIteration' sau cu un '--target' de 'es2015' sau mai mare

Așa că m-am dus la ts.config și am schimbat valoarea, dar tot apare aceeași eroare.

Iată ts.config-ul meu:

{
  "compilerOptions": {
    "target": "es2015",
I   "downlevelIteration": true
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx"
  },
  "include": [
    "src"
  ]
}

Ai vreo idee de ce continui să primesc această eroare?

Răspuns #1

Problema este că vrei să folosești o funcționalitate care este disponibilă doar în versiunea JavaScript ES2015 și în versiunile ulterioare.

Soluția este să actualizați fișierul tsconfig.json, schimbând "target" la cel puțin "es2015" (numit și "es6").

{
  "compilerOptions": {
    "target": "es2015",
    ...
  }
}

Sursă: Opțiune țintă TSConfig

Răspunsul #2

încearcă exercicesId=Array.from(new Set(exercicesId));

Răspunsul #3

Am avut aceeași eroare, setarea tsconfig.json de la CommonJS la module Es cu target, module, moduleResolution m-a ajutat.

tsconfig.json-ul meu:

    "compilerOptions": {
        "target": "ES2020",
        "module": "ESNext",
        "moduleResolution": "NodeNext",
        "jsx": "react-jsx",
        "baseUrl": "./",
        "resolveJsonModule": true,
        "esModuleInterop": true
    }
}