Typescript 为什么foreach在使用es3编译目标时不编译?

Typescript 为什么foreach在使用es3编译目标时不编译?,typescript,foreach,Typescript,Foreach,我在typescript设置中将目标设置为“es3” { "compilerOptions": { "target": "es3", "outDir": "dist" } } 我编写了“foreach”语法 const array: string[] = ['hi', 'hello']; array.forEach(element => { console.log(element); }); 我已经编译了这段代码。 获得了以下结

我在typescript设置中将目标设置为“es3”

{
    "compilerOptions": {
        "target": "es3",
        "outDir": "dist"
    }
}
我编写了“foreach”语法

const array: string[] = ['hi', 'hello'];

array.forEach(element => {
    console.log(element);
});
我已经编译了这段代码。 获得了以下结果

var array = ['hi', 'hello'];
array.forEach(function (element) {
    console.log(element);
});

为什么不使用es3编译“foreach”语法?

方法永远不会在TypeScript中转换为其他形式。如果在TypeScript中调用
.someMethod()
,则生成的JavaScript也将调用
.someMethod()
,即使实际上没有这样的方法。相反,
for of
语法将为您提供与ES3兼容的代码

for (const item of []) { }
这将为您提供:

for (var _i = 0, _a = []; _i < _a.length; _i++) {
    var item = _a[_i];
}
for(var _i=0,_a=[];_i<_a.length;_i++){
风险值项目=_a[_i];
}

不幸的是,TS没有显示您没有的
.forEach
错误,这是因为lib.d.TS包含每个ES5定义的类型,并且认为您有这些类型。(有关更多信息,请参阅)

您所说的“不编译”是什么意思?@EduardMalakhov即使您使用es3作为目标进行编译,foreach语法仍然是foreach。Foreach是可以在es5及以上版本中使用的代码。我相信Typescript假设在可用的地方包含多填充,并且Foreach可以很容易地多填充。