我想要遍历结果
document.getElementsByTagName("...");
它返回的是一个 HTMLCollection
,而不是一个数组。因此我不能简单地使用 forEach
。
以下方法是可行的,但看起来不太好:
let elements = document.getElementsByTagName("...");
for (var i = 0, m = elements.length; i < m; i++) {
let element = elements[i];
}
对于 JavaScript,存在非常类似的问题:
如何循环遍历 HTMLCollection 中的元素?而且显然,最新版本的现代浏览器都支持:
var list = document.getElementsByClassName("events");
for (let item of list) {
log(item.id);
}
但 TypeScript 编译器报错:
error TS2495: Type 'NodeListOf<HTMLParagraphElement>' is not an array type or a string type.
尽管如此,它仍然被转译为适当的JavaScript代码。它甚至知道我在这里做什么,并不只是复制源代码。编译后的输出如下:
var elements = main_div.getElementsByTagName("p");
for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {
var element = elements_1[_i];
}
这很好,因为生成的代码即使在旧版浏览器上也受支持。但我想摆脱错误消息。
我的 compilerOptions 是这样的:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"sourceMap": true,
"rootDir": "src",
"lib": [
"es2015",
"dom"
]
}
}
我尝试编辑我的库选项。此特定功能是ES6的一部分,并已经重构了几次。因此,我在lib中测试了各种ecmascript版本,但找不到可用的设置。