首页 > 解决方案 > 'esnext.array' 编译器选项不允许访问 Array.prototype.flat()

问题描述

我正在尝试在使用 JavaScript 数组实验功能(如flat().

我已将esnext.array选项添加到tsconfig.json,因此该lib部分如下所示:

"lib": [
    "es2017",
    "esnext.array",
    "dom"
],

我检查了lib.esnext.array.d.ts文件,它确实包含该flat()方法的定义。

但尽管如此,我得到了一个编译错误:

src/app/services/service.ts(286,22) 中的错误:错误 TS2339:“ReadonlyMap[]”类型上不存在属性“flat”。

更新 1: 我检查esnext了导致相同错误的选项。

此外,我检查了 Angular CLIlib通过键入不存在的内容(例如esnext.array.dfgdfg.

更新 2: 为了排除 TypeScript 版本 2.9.2 或 Angular 工具链有问题的可能性,我用纯 TypeScript 创建了一个简单的项目:

// greeter.ts
function greeter(persons: string[]) {
    return "Hello, " + persons.flat().join();
}

var user: string[] = ["Jane User"];

document.body.innerHTML = greeter(user);

// tsconfig.json
{
  "compilerOptions": {
    "target": "esnext",
    "lib": [
      "es2017",
      "esnext.array",
      "dom"
    ]
  }
}

并尝试使用 TypsScript 2.9.2、当前最新的 3.0.1 和 编译它typescript@next,但我总是得到同样的错误:

greeter.ts:2:32 - 错误 TS2339:“字符串 []”类型上不存在属性“平面”。

2 返回“你好”+persons.flat().join(); ~~~~

有人可以解释我在这里缺少什么吗?

标签: javascriptangulartypescript

解决方案


在较旧的 TypeScript 版本中,flat()被称为flatten(). 因此,如果您坚持使用这些 TS 版本,您可以尝试flatten()改用。


推荐阅读