【问题标题】:What is the array type for html elements in typescript?打字稿中html元素的数组类型是什么?
【发布时间】:2016-07-29 14:43:27
【问题描述】:

我有一个存储 DOM 查询结果的 typescript 变量:

let games = document.getElementsByTagname("game");

但是结果数组的正确类型是什么?我希望一个包含 htmlelements 的数组?

// not working
let games : Array<HTMLElement> = document.getElementsByTagName("game");
// also not working
let games : NodeList<HTMLElement> = document.getElementsByTagName("game");

【问题讨论】:

  • 你可以使用 Array/ Array 作为类型,看看有没有人工作?
  • 使用 Array 时出现此错误:'NodeListOf' 不可分配给类型 'Element[]'。 “NodeListOf”类型中缺少属性“push”。
  • 使用 NodeListOf 而不是 Array。它可能会解决您的错误。
  • 如果你想在以后使用该元素进行任何操作,你需要将其转换为NodeListOf&lt;HTMLElement&gt;,否则它不会让你获取innerText,点击等

标签: types typescript


【解决方案1】:

你需要使用NodeListOf&lt;T&gt;,例如:

let games : NodeListOf<Element> = document.getElementsByTagName("game");

您可以使用类型断言将其强制为HTMLElement[],但这会提供误导性类型信息并使您的工具撒谎。

【讨论】:

  • 啊..我没有意识到“NodeListOf”实际上是一种类型......(“Of”是什么意思?)。另外,为什么 DOM 元素有这么多不同的类型? (NodeList、NodeListOf、Element 和 HTMLElement)。只是为了从我的 DOM 中获取一个 div,从一种类型转换为另一种类型似乎很麻烦。
  • “Of”表示它是X类型的NodeList,例如NodeListOf&lt;HTMLElement&gt;表示节点类型HTMLElement的列表。您需要强制转换的原因是javascripts querySelectors 或其他选择器可以产生数百种节点类型,并且在打字稿中,如果产生错误的节点类型,您希望确定会抛出错误..
猜你喜欢
  • 2020-11-19
  • 2016-11-06
  • 1970-01-01
  • 2019-01-10
  • 2021-12-04
  • 2022-01-19
  • 2019-01-26
  • 1970-01-01
  • 2018-06-13
相关资源
最近更新 更多