Maszynopis flatMap, flat, flatten nie istnieje w typie any []


141

Używam chrome 70 i chrome dodaje metody .flatMap, .flatten, .flat. Więc mój kod działa zgodnie z oczekiwaniami. Niestety, Typescript tego nie lubi.

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

ostrzeżenie, które otrzymałem, to TS2339: Property 'flatMap' does not exist on type 'any[]'.

Nawiasem mówiąc używam Angular 6, które wykorzystują Typescript ~2.9.2i zawierają już import 'core-js/es7/array';w polyfills.ts.

Domyślam się, że nie ma wpisywania dla tych metod i próbowałem, npm run -dev @types/array.prototype.flatmapale nadal nie rozwiązałem.

Odpowiedzi:


286

Należy dodać es2019lub es2019.arraydo --libustawienia, aby TypeScript rozpoznawał array.flat()i flatMap().

Przykład:

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

Wcześniej było to dostępne jako część esnextlub esnext.array, ale teraz jest oficjalnie częścią ES2019.


4
Tak, odtwarzam to i działa. Oto moja compilerOptionsw tsconfig.app.json "lib": [ "es2017", "dom", "esnext.array", ] Dziękuję panu
Haziq

4
To nie rozwiązało problemu w moim IDE, VSCode. Jakieś wskazówki?
timelf123

4
@ timelf123 czy zrestartowałeś swoje IDE?
Brian Allan West

1
Czy istnieje powód (a jeśli tak, jaki jest skutek) używania "esnext"zamiast "esnext.array"?
maninak

7
Uwaga: flatMap jest teraz obsługiwany w węźle 11+
JeffMinsungKim

4

Możesz rozszerzyć globalny interfejs tablicy podczas oczekiwania na stabilność, po czym zostanie on dodany do domyślnej biblioteki.

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

4

Odpowiedź Aarona Bealla jest doskonała. Warto wiedzieć, że jeśli w pliku tsConfig.JSON nie podano „lib”, wstrzyknięta zostanie domyślna lista bibliotek. Domyślne wstawione biblioteki to: ► For --target ES5: DOM, ES5, ScriptHost ► For --target ES6: DOM, ES6, DOM.Iterable, ScriptHost

Innymi słowy: musimy określić te biblioteki, które zostały wcześniej dodane automatycznie. (więcej informacji: https://www.typescriptlang.org/docs/handbook/compiler-options.html )

"compilerOptions": {

   "target": "es6",

   "lib": [ "es2019", "DOM", "ES6" ,"DOM.Iterable", "ScriptHost"],}

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.