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
]
}
}