web-dev-qa-db-fra.com

Dactylographié, 'NodeListOf <Element>' n'est pas un type de tableau ou un type de chaîne

Conversion de mon JS en mode strict TS (gros maux de tête haha)

La syntaxe suivante me semble correcte mais TS se plaint dans la boucle for sur allSubMenus avec:

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

qu'est-ce qui me manque s'il te plait

function subAct(target:Node){

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

  for (const sub of allSubMenus){
    sub.classList.remove('active')
  }  
}
14
Sam

Vous devez définir l'option de compilateur target sur es6 ou supérieur pour NodeListOf<T> pour être itérable.

5
Matt McCutchen

Il s'agit d'une erreur d'analyse latérale de TypeScript. J'ai eu le même problème avec HTMLCollectionOf

faites-le comme tout, cela fonctionne pour moi

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

  for (const sub of allSubMenus as any){ // then will pass compiler
    sub.classList.remove('active')
  }  
15
John

Tu pourrais essayer

const allSubMenus : NodeListOf<Element> = document.querySelectorAll('.subMenuItems') 
Array.from(allSubMenus).map(subMenu => {/* */})
0
BonjourMonde