Typescript,“ NodeListOf <Element>”不是数组类型或字符串类型

Sam*_*Sam 9 javascript iteration nodelist typescript htmlcollection

将我的JS转换为TS严格模式(非常头痛哈哈)

下面的语法看起来好像没什么问题,但TS在抱怨for环路上allSubMenus有:

[ts] Type 'NodeListOf<Element>' is not an array type or a string type.

我想念什么

function subAct(target:Node){

  const allSubMenus : NodeListOf<Element> = document.querySelectorAll('.subMenuItems') 

  for (const sub of allSubMenus){
    sub.classList.remove('active')
  }  
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ohn 16

这是打字稿侧解析错误。我对HTMLCollectionOf有同样的问题

使任何,它为我工作

  const allSubMenus : NodeListOf<Element> = document.querySelectorAll('.subMenuItems') 

  for (const sub of allSubMenus as any){ // then will pass compiler
    sub.classList.remove('active')
  }  
Run Code Online (Sandbox Code Playgroud)

  • 抛开答案的优点不谈,对于任何读到这篇文章的人来说:请不要使用它!)。强制转换为“any”会关闭类型检查 - 您将失去“sub”的所有类型安全性,并失去支持 IDE 的自动完成功能(除非您强制转换)。另请注意:“querySelectorAll”默认返回“NodeListOf&lt;Element&gt;”,无需显式键入“allSubMenus”变量。 (4认同)

Mat*_*hen 6

您需要将target编译器选项设置为es6或更高NodeListOf<T>才能迭代。


小智 6

你可以试试

const allSubMenus : NodeListOf<Element> = document.querySelectorAll('.subMenuItems') 
Array.from(allSubMenus, subMenu => {/* */})
Run Code Online (Sandbox Code Playgroud)