Estoy usando Chrome 70 y Chrome agrega métodos .flatMap, .flatten, .flat
. Entonces mi código se ejecuta como se esperaba. Desafortunadamente, a Typecript no le gusta.
// data.flatMap lint error
export const transformData = (data: any[]) => data.flatMap(abc => [
parentObj(abc),
...generateTasks(abc)
]);
la advertencia que recibí es TS2339: Property 'flatMap' does not exist on type 'any[]'.
Por cierto, estoy usando Angular 6
, que uso Typescript ~2.9.2
y ya incluyo import 'core-js/es7/array';
en polyfills.ts
.
Supongo que no hay que escribir para estos métodos, y lo intenté, npm run -dev @types/array.prototype.flatmap
pero aún no lo resolví.
angular
typescript
Haziq
fuente
fuente
compilerOptions
entsconfig.app.json
"lib": [ "es2017", "dom", "esnext.array", ]
Gracias señor"esnext"
lugar de"esnext.array"
?Puede extender la interfaz de matriz global mientras espera la estabilidad, momento en el que se agregará a la biblioteca predeterminada.
fuente
La respuesta de Aaron Beall es excelente. Puede valer la pena saber que si "lib" no se especifica en el archivo tsConfig.JSON, se inyecta una lista predeterminada de bibliotecas. Las bibliotecas predeterminadas inyectadas son: ► Para --target ES5: DOM, ES5, ScriptHost ► Para --target ES6: DOM, ES6, DOM.Iterable, ScriptHost
En otras palabras: Debemos especificar aquellas librerías que previamente se agregaron automáticamente. (consulte: https://www.typescriptlang.org/docs/handbook/compiler-options.html para obtener más información)
fuente
A matriz plana de un solo nivel
A matriz plana de varios niveles
para conocer en profundidad también puede consultar el siguiente enlace
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
fuente