在javascript / typescript中将元素转换为HTMLElement

Converting Element to HTMLElement in javascript / typescript

提问人:Luke 提问时间:2/13/2020 更新时间:10/20/2023 访问量:9412

问:

因此,我使用 querySelectorAll 获取与选择器匹配的元素列表,该选择器将它们存储在 NodeList 中。

然后,我使用 forEach 循环扫描 NodeList,此时每个 individualItem 的类型为“Element”。

但是,我将这些 individualItems 输入到一个函数“doThing()”中,该函数期望 individualItem 的类型为“HTMLElement”(我使用的是打字稿)。我想知道是否有一些内置的 js 函数用于将“Element”类型转换为“HTMLElement”类型,或者如果没有,这样的函数可能是什么样子的

const h = document.querySelectorAll(someClassString);

h.forEach(individualItem => {
            individualItem.addEventListener(c.EVENT, () => doThing(individualItem));
})    

JavaScript TypeScript 强制转换 节点列表

评论


答:

5赞 Gabriel Lima 2/13/2020 #1

既然你使用的是 TypeScript,为什么不把它强制转换为另一种类型呢?在这里查看

const h = document.querySelectorAll(someClassString);

h.forEach(individualItem => {
    individualItem.addEventListener(c.EVENT, () => doThing(individualItem as HTMLElement));
});

编辑 2023

我不知道我在写这篇文章时是否对 Typescript 的了解有限,或者这个功能是否还不可用,但正如 Ron Jonk 指出的那样,最优雅和可重用的解决方案是

const h = document.querySelectorAll<HTMLElement>(someClassString);

h.forEach(individualItem => {
    individualItem.addEventListener(c.EVENT, () => doThing(individualItem));
});
8赞 Ron Jonk 7/7/2021 #2

若要键入 querySelectorAll 的输出,可以按以下方式执行此操作:

document.querySelectorAll<HTMLTableElement>('.mytable')

评论

0赞 Gabriel Lima 10/20/2023
尽管问题所有者接受了我的答案,但我认为这是最优雅的解决方案。