Typcript flatMap, flat, flatten не существует на типе any []

Я использую chrome 70 и chrome добавляет методы .flatMap,.flatten,.flat. Поэтому мой код работает как ожидалось. К сожалению, TypScript не нравится.

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

предупреждение, которое я получил, это TS2339: Property 'flatMap' does not exist on type 'any[]'.

Кстати, я использую Angular 6, которые используют Typescript ~2.9.2 и я уже включаю import 'core-js/es7/array'; в polyfills.ts.

Я предполагаю, что для этих методов нет набора текста, и я попытался npm run -dev @types/array.prototype.flatmap но до сих пор не решил.

Ответы

Ответ 1

Вы должны добавить es2019 или es2019.array в настройку --lib, чтобы TypeScript распознавал array.flat() и flatMap().

Пример:

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

Ранее это было доступно как часть esnext или esnext.array, но теперь оно официально является частью ES2019.

Ответ 2

Вы можете расширить интерфейс глобального массива, пока вы ждете стабильности, после чего он будет добавлен в библиотеку по умолчанию.

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

Ответ 3

В дополнение к исходному ответу также необходимо добавить dom, чтобы иметь возможность использовать все глобально доступные объекты, такие как document или localStorage.

{
  "compilerOptions": {
    ...your options
    "lib": [
      "es2019", // enables to use es2019 features like flatMap in Array
      "dom" // very important to have also that
    ]
  }
}