我正在使用带有"target": "es5"
的TypeScript。我还使用es6-shim
,我已经安装了es6-shim/index.d.ts
文件。这一切都很好。我的问题是当我尝试执行以下操作时出现错误的原因:
const map = new Map<string, number>([
['A', 1],
['B', 2]
]);
错误如下所示:
然而,如果我&#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"
]
}
答案 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