【发布时间】:2019-04-05 12:39:52
【问题描述】:
我想遍历结果
document.getElementsByTagName("...");
它返回一个HTMLCollection,而不是一个数组。所以我不能简单地使用forEach。
以下是可能的,但看起来不太好:
let elements = document.getElementsByTagName("...");
for (var i = 0, m = elements.length; i < m; i++) {
let element = elements[i];
}
对于 javascript,几乎存在完全相同的问题: For loop for HTMLCollection elements
显然,随着最新更新,现代浏览器支持:
var list = document.getElementsByClassName("events");
for (let item of list) {
log(item.id);
}
但是打字稿编译器抱怨:
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": {
"module": "commonjs",
"target": "es5",
"sourceMap": true,
"rootDir": "src",
"lib": [
"es2015",
"dom"
]
}
}
我确实尝试过编辑我的 lib 选项。这个特定的特性是 ES6 的一部分,并且已经被重新设计了几次。所以我在 lib 中测试了各种 ecmascript 版本,但找不到有效的设置。
【问题讨论】:
标签: typescript