Typescript flatMap, flat, flatten doesn't exis

2020-01-25 07:29发布

问题:

I'm using chrome 70 and chrome does add methods .flatMap, .flatten, .flat. So my code does run as expected. Unfortunately, Typescript doesn't like it.

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

the warning i got is TS2339: Property 'flatMap' does not exist on type 'any[]'.

By the way I'm using Angular 6, which use Typescript ~2.9.2 and I already include import 'core-js/es7/array'; in polyfills.ts.

My guess is that there is no typing for these methods, and I did try to npm run -dev @types/array.prototype.flatmap but still not solve.

回答1:

You should add es2019 or es2019.array to your --lib setting for TypeScript to recognize array.flat() and flatMap().

Example:

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

Previously this was available as part of esnext or esnext.array, but it's now officially part of ES2019.



回答2:

You can extend the global array interface while you wait for stability, at which point it will be added to the default library.

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