代码之家  ›  专栏  ›  技术社区  ›  Alexander Abakumov

“esnext.array”编译器选项不允许访问array.prototype.flat()

  •  2
  • Alexander Abakumov  · 技术社区  · 7 年前

    我试图在使用JavaScript数组实验特性时编译Angular 2应用程序,比如 flat() .

    我又加了一句 esnext.array 选择 tsconfig.json ,所以 lib 部分如下所示:

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

    我查过了 lib.esnext.array.d.ts 它确实包含了 平面() 方法。

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

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

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

    另外,我检查了Angular CLI 图书馆 通过键入一些不存在的选项 esnext.array.dfgdfg .

    更新2: 为了排除TypeScript版本2.9.2或角度工具链出错的可能性,我使用纯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 ,但我总是得到相同的错误:

    TS:2 32 -错误TS23 39:属性“平坦”不存在于类型上 “字符串[]”。

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

    有人能解释一下我遗漏了什么吗?

    0 回复  |  直到 6 年前
        1
  •  0
  •   Denes Papp    6 年前

    这里可能有Node.js v10/v11兼容性问题。

    一个临时的解决方案是使用Lodash的 flatten :

    而不是 array.flat() 使用 _.flatten(array)