web-dev-qa-db-fra.com

Le script plat, carte, plat, n'existe pas sur le type []

J'utilise chrome 70 et chrome ajoute les méthodes .flatMap, .flatten, .flat. Donc, mon code fonctionne comme prévu. Malheureusement, TypeScript ne l'aime pas.

// data.flatMap lint error
export const transformData = (data: any[]) => data.flatMap(abc => [
   parentObj(abc),
   ...generateTasks(abc)
]);

l'avertissement que j'ai obtenu est TS2339: Property 'flatMap' does not exist on type 'any[]'.

En passant, j'utilise Angular 6, qui utilise TypeScript ~2.9.2 et j'inclus déjà import 'core-js/es7/array'; dans polyfills.ts.

Mon hypothèse est qu'il n'y a pas de dactylographie pour ces méthodes et j'ai essayé de npm run -dev @types/array.prototype.flatmap mais je n'ai toujours pas résolu.

34
Haziq

Vous devez ajouter es2019 ou es2019.array à votre paramètre --lib pour que TypeScript reconnaisse array.flat() et flatMap().

Exemple:

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "es2019"
    ]
  }
}

Auparavant, cette option était disponible dans esnext ou esnext.array, mais elle fait maintenant officiellement partie de ES2019.

85
Aaron Beall

Vous pouvez étendre l’interface de tableau global en attendant la stabilité. À ce stade, elle sera ajoutée à la bibliothèque par défaut.

interface Array<T> {
    flat(): Array<T>;
    flatMap(func: (x: T) => T): Array<T>;
}
2
Fenton