我正在寻找一种方法来获取javascript中HTMLElement
的所有孩子HTMLElement
。我使用了childNodes
,但我无法将NodeList
转换为Array.<HTMLElement>
,因为它们不是彼此的子类型(我正在使用Google Closure Compiler来强制输入)。
以下是一个返回警告的示例:
/** @type {Array.<HTMLElement>} */
var kids = /** @type {Array.<HTMLElement>} */ (document.childNodes);
返回
test.js:2: WARNING - invalid cast - must be a subtype or supertype
from: NodeList
to : (Array.<(HTMLElement|null)>|null)
var kids = /** @type {Array.<HTMLElement>} */ (document.childNodes);
^
由于所有childNodes
都不是HTMLElements
,我可以理解警告但有解决方法吗?
===编辑===
令人惊讶的是,我将Node
投射到HTMLElement
没有问题。问题来自于将NodeList
转换为Array.<Node>
。
答案 0 :(得分:4)
我认为在这种情况下编译器是正确的 - NodeLists不是Arrays,也不是它们相关的。见https://developer.mozilla.org/en-US/docs/Web/API/NodeList
您需要使用两种类型的并集来扩充类型定义:
/** @type {Array.<Node>|NodeList} */
var kids = document.childNodes;