打字稿flatMap,flat,flatten在any类型上不存在[]

时间:2018-11-30 11:11:25

标签: angular typescript

我正在使用chrome 70,chrome确实添加了方法.flatMap, .flatten, .flat。所以我的代码确实按预期运行。不幸的是,Typescript不喜欢它。

// 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,但仍然无法解决。

7 个答案:

答案 0 :(得分:36)

您应将esnextesnext.array添加到--lib设置中,以便TypeScript识别array.flat()flatMap()

示例:

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

答案 1 :(得分:8)

亚伦·比尔的答案非常好。值得一提的是,如果未在tsConfig.JSON文件中指定“ lib”,则会注入默认的库列表。注入的默认库为: ►对于--target ES5:DOM,ES5,ScriptHost ►对于--target ES6:DOM,ES6,DOM.Iterable,ScriptHost

换句话说:我们必须指定以前自动添加的那些库。 (有关更多信息,请参见:https://www.typescriptlang.org/docs/handbook/compiler-options.html

"compilerOptions": {

   "target": "es6",

   "lib": [ "es2019", "DOM", "ES6" ,"DOM.Iterable", "ScriptHost"],}

答案 2 :(得分:5)

到平坦的单级数组

arr.reduce((acc, val) => acc.concat(val), []);

到平面多级数组

function flatDeep(arr, d = 1) {
   return d > 0 ? arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), []) : arr.slice();
};

要深入了解,您还可以查看以下链接

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat

答案 3 :(得分:1)

您可以在等待稳定性时扩展全局数组接口,届时它将被添加到默认库中。

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

答案 4 :(得分:0)

您也可以将 esnext 添加到您的 --lib 而不是 'es2019'

"compilerOptions": {
    "target": "es2015",
    "lib": ["dom", "esnext"]
}

它对我有用。

答案 5 :(得分:0)

从 angular 11 和 thx 到 typescript 3.9,这是现在的新配置。

"compilerOptions": {
    "target": "es2018",
    "module": "es2020",
    "lib": ["es2020", "dom"],
}

为什么是 es2020 而不是 esnext

<块引用>

在 TypeScript 3.9 中,模块控制的 TypeScript 编译器的行为与“esnext”和“es2020”值相同。这种行为将来可能会发生变化,因为“esnext”选项可能会以向后不兼容的方式发展,从而导致在 TypeScript 更新期间出现构建时或运行时错误。因此,代码可能会变得不稳定。使用“es2020”选项可以降低这种风险。

for further read

答案 6 :(得分:-1)

我收到此错误的原因是我正在使用旧版本的节点(10)

安装11+版本将解决此问题。