1

我将 TypeScript 与"target": "es5". 我也在使用es6-shim,我已经安装了es6-shim/index.d.ts文件。没关系。我的问题是为什么当我尝试执行以下操作时会出现错误:

const map = new Map<string, number>([
    ['A', 1],
    ['B', 2]
]);

错误如下所示:

打字稿地图错误

但是,如果我“转换”数组以明确声明它包含字符串/数字对的元组,那么它可以工作:

const map = new Map<string, number>(<[string, number][]>[
    ['A', 1],
    ['B', 2]
]);

另一方面,如果我将编译器设置更改为"target": "es6",则错误再次消失并且不需要强制转换。

所以我的问题是,为什么编译器在 es5 模式下无法确定数组包含字符串/数字元组?有没有办法“修复”它以便不需要演员?

编辑

这是我的tsconfig.json文件:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts"
  ]
}
4

1 回答 1

0

如果您想使用 TypeScript 并将其定位到 es5 并仍然使用 Map 等功能,您确实需要在使用时使用 polyfill 或 shim。

TypeScript 无法知道您正在使用它。但是你可以通过在你的项目中复制 lib.es6.d.ts 来告诉编译器允许它。

当你使用 npm 安装 TypeScript 时,会有一个名为 lib.es6.d.ts 的文件,只需将它复制到你的 typings 或 src 文件夹中,它应该可以工作。

如果您想使用诸如 Object.assign 之类的东西,您可能想要复制的另一个文件是 lib.core.es6.d.ts

编辑:

另一种选择是安装 es6-shim 的类型:

typings install es6-shim --ambient --save
于 2016-05-10T15:32:05.417 回答