我想迭代的结果

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);
}

但是 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];
}

很好,因为即使在较旧的浏览器上也支持生成的代码。但我想摆脱错误消息。

我的compileOptions是这样的:
{
    "compilerOptions": {

        "module": "commonjs",
        "target": "es5",
        "sourceMap": true,
        "rootDir": "src",
        "lib": [
            "es2015",
            "dom"
        ]
    }
}

我确实尝试编辑我的lib选项。该特定功能是ES6的一部分,并且已进行了多次重做。因此,我在lib中测试了各种ecmascript版本,但找不到有效的设置。

最佳答案

如果要使用forEach,可以将其转换为数组

const elements: Element[] = Array.from(document.getElementsByTagName("..."));
elements.forEach((el: Element) => {
    // do something
})

关于用于循环遍历HTMLCollection的 typescript ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53098742/

10-11 11:38