当目标是ES5时,TypeScript无法识别解构

时间:2016-05-10 15:16:23

标签: typescript es6-shim

我正在使用带有"target": "es5"的TypeScript。我还使用es6-shim,我已经安装了es6-shim/index.d.ts文件。这一切都很好。我的问题是当我尝试执行以下操作时出现错误的原因:

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

错误如下所示:

TypeScript Map error

然而,如果我&#34;演员&#34;数组要明确声明它包含字符串/数字对的元组,然后它可以工作:

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

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

所以我的问题是,为什么编译器在es5模式下会发现数组包含字符串/数字元组?有没有办法去修复&#34;这样就不需要施法了吗?

修改

这是我的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"
  ]
}

1 个答案:

答案 0 :(得分:0)

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

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

当您使用npm安装TypeScript时,会有一个名为lib.es6.d.ts的文件,只需将其复制到您的typings或src文件夹中即可。

您可能想要复制的另一个文件是lib.core.es6.d.ts,如果您想使用Object.assign等内容

修改:

另一个选择是安装es6-shim的输入:

typings install es6-shim --ambient --save