Estou usando o Chrome 70 e o Chrome adiciona métodos .flatMap, .flatten, .flat
. Portanto, meu código funciona conforme o esperado. Infelizmente, o Typescript não gosta disso.
// data.flatMap lint error
export const transformData = (data: any[]) => data.flatMap(abc => [
parentObj(abc),
...generateTasks(abc)
]);
o aviso que recebi é TS2339: Property 'flatMap' does not exist on type 'any[]'.
A propósito, estou usando Angular 6
, qual uso Typescript ~2.9.2
e já incluo import 'core-js/es7/array';
no polyfills.ts
.
Meu palpite é que não há digitação para esses métodos, e eu tentei, npm run -dev @types/array.prototype.flatmap
mas ainda não consegui resolver.
fonte
compilerOptions
emtsconfig.app.json
"lib": [ "es2017", "dom", "esnext.array", ]
Obrigado, senhor"esnext"
vez de"esnext.array"
?Você pode estender a interface do array global enquanto espera pela estabilidade, momento em que ele será adicionado à biblioteca padrão.
fonte
A resposta de Aaron Beall é excelente. Pode valer a pena saber que, se "lib" não for especificado no arquivo tsConfig.JSON, uma lista padrão de bibliotecas será injetada. As bibliotecas padrão injetadas são: ► Para --target ES5: DOM, ES5, ScriptHost ► Para --target ES6: DOM, ES6, DOM.Iterable, ScriptHost
Em outras palavras: devemos especificar as bibliotecas que foram adicionadas automaticamente anteriormente. (consulte: https://www.typescriptlang.org/docs/handbook/compiler-options.html para mais informações)
fonte
Para uma matriz plana de nível único
Para uma matriz plana de vários níveis
para saber mais a fundo você também pode verificar o link abaixo
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat
fonte