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



我在打字稿设置中将目标设置为"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);
});

为什么 'foreach' 语法不能使用 es3 编译?

方法永远不会在 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];
}

不幸的是,TS没有显示您没有.forEach的错误,这是因为lib.d.ts包含每个ES5定义的类型并认为您拥有它们。(有关更多信息,请参阅 Microsoft/TypeScript#2410(

最新更新