【问题标题】:Map.prototype.forEach does not exist Angular 6 projectMap.prototype.forEach 不存在 Angular 6 项目
【发布时间】:2018-10-08 18:31:42
【问题描述】:

我正在尝试从 Http 响应中获取 C# Dictionary 对象并将其转换为 JavaScript 中的 Map。我无法弄清楚为什么我不能使用 Map.prototype.forEach。它一直告诉我它不存在。根据 Map.prototype.forEach 的 MDN,它最初是在 ES2015 中引入的。我在 tsconfig 的 lib 部分中包含了 ES2015、ES2015.collection 和 ES2015.iterable。我认为这就足够了,但它似乎根本不起作用。有什么我遗漏的吗?

下面是我的 tsconfig 文件:

{
  "compileOnSave": false,
  "compilerOptions": {
    "target": "es5",
    "module": "es2015",
    "lib": [
      "es5",
      "es2015",
      "es2015.collection",
      "es2015.iterable",
      "es2016",
      "es2017",
      "dom"
    ],
    "allowJs": false,
    "checkJs": false,
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "outDir": "./dist/out-tsc",
    "alwaysStrict": true,
    "moduleResolution": "node",
    "baseUrl": "./",
    "typeRoots": [
      "node_modules/@types"
    ],
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
  }
}

我正在尝试使用的代码:

myMap: Map<number, Array<number>> = new Map<number, Array<number>>();
this.myMap.forEach((value: Array<number>) => {  /* ERROR HERE */
  console.log(value);
})

这里是Map接口的关联文件这里是关联代码Map interface

以下是有关该项目的一些信息:

Angular v6.0.4

Angular CLI v6.0.8

Typescript v2.7.2

【问题讨论】:

  • 还有...你没有忘记发布代码吗?请看MCVE?
  • 你是在调用原型函数吗?如果是这样,请尝试在可迭代对象上调用它arr.forEach(item)
  • @DenysSéguret 抱歉,我忘了包含代码。为完整性而编辑。
  • 新的 Map>() 是否返回对象,您能检查一下吗?实际上 new 总是返回一个对象。
  • @AnkitPandey 调用 new Map 调用 MapConstructor 接口,然后使用 Map 接口并在该接口上显示 forEach 方法。更新了我的答案以在 GitHub 上包含相关文件。

标签: javascript angular typescript ecmascript-6 tsconfig


【解决方案1】:

问题源于试图在 Http 响应中获取 C# Dictionary 对象并将其键入为 Map。这本身就不起作用。响应返回 { K: number, V: number[] } 的通用 JavaScript 对象,即使我将其键入为 Map。显然 Object 没有 forEach 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 2021-12-22
    • 2019-09-15
    • 2019-03-28
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    相关资源
    最近更新 更多