当我试图将typescript代码编译成javascript时,得到**Type';诺德利斯托夫<;元素>';不是数组类型或字符串类型**

当我试图将typescript代码编译成javascript时,得到**Type';诺德利斯托夫<;元素>';不是数组类型或字符串类型**,javascript,html,typescript,Javascript,Html,Typescript,当我尝试将typescript代码编译成javascript时,获取类型“NodeListOf”不是数组类型或字符串类型 if (query.length) { var regex = new RegExp("(" + query + ")", "gm"); var li = document.querySelectorAll("#id li"); //error

当我尝试将typescript代码编译成javascript时,获取类型“NodeListOf”不是数组类型或字符串类型

if (query.length) {                                              
  var regex = new RegExp("(" + query + ")", "gm"); 
  var li = document.querySelectorAll("#id li"); //error                 
    for (var Element of li){                                   
      Element.innerHTML = Element.innerHTML.replace(regex, '<span class="classname">$1</span>'); 
    }
  }
}
if(query.length){
var regex=new RegExp(“(“+query+”),“gm”);
var li=document.queryselectoral(#id li”);//错误
对于(li的var元素){
Element.innerHTML=Element.innerHTML.replace(regex,$1');
}
}
}

试试这个。。将解决问题

if(query.length){
var模式=新的RegExp(“(“+query+”),“gim”);
var li=document.queryselectoral(“test li”);
对于(li的var元素){
Element.innerHTML=Element.innerHTML.replace(模式“$1”);
}

}
试试这个。。将解决问题

if(query.length){
var模式=新的RegExp(“(“+query+”),“gim”);
var li=document.queryselectoral(“test li”);
对于(li的var元素){
Element.innerHTML=Element.innerHTML.replace(模式“$1”);
}

}
下面的代码编译得很好,我已经内联添加了注释

let query = '';
if (query.length) {
    var pattern = new RegExp("(" + query + ")", "gim");
    var li: NodeListOf<Element> = document.querySelectorAll("#test li");
    // ES5 does not allow TS iteration of NodeListOf<Element> nor use of Array.from 
    // so it is necessary to loop over it manually.
    // Note that Element is an existing type which caused a conflict with "(var Element of list)".
    // It was necessary to rename Element to element.
    for (let i = 0; i < li.length; i++) {
        let element = li[i];
        element.innerHTML = element.innerHTML.replace(pattern, '<span class="target">$1</span>');
    }
}
let query='';
if(query.length){
var模式=新的RegExp(“(“+query+”),“gim”);
var li:NodeListOf=document.queryselectoral(“#test li”);
//ES5不允许对NodeListOf进行TS迭代,也不允许使用Array.from
//因此,有必要手动对其进行循环。
//请注意,元素是导致与“(列表的var元素)”冲突的现有类型。
//有必要将元素重命名为元素。
for(设i=0;i
下面的代码编译得很好,我已经内联添加了注释

let query = '';
if (query.length) {
    var pattern = new RegExp("(" + query + ")", "gim");
    var li: NodeListOf<Element> = document.querySelectorAll("#test li");
    // ES5 does not allow TS iteration of NodeListOf<Element> nor use of Array.from 
    // so it is necessary to loop over it manually.
    // Note that Element is an existing type which caused a conflict with "(var Element of list)".
    // It was necessary to rename Element to element.
    for (let i = 0; i < li.length; i++) {
        let element = li[i];
        element.innerHTML = element.innerHTML.replace(pattern, '<span class="target">$1</span>');
    }
}
let query='';
if(query.length){
var模式=新的RegExp(“(“+query+”),“gim”);
var li:NodeListOf=document.queryselectoral(“#test li”);
//ES5不允许对NodeListOf进行TS迭代,也不允许使用Array.from
//因此,有必要手动对其进行循环。
//请注意,元素是导致与“(列表的var元素)”冲突的现有类型。
//有必要将元素重命名为元素。
for(设i=0;i
这同样有效:

let elements: any = document.querySelectorAll(".class");
for(let ele of elements) {
     // do stuff
}
这也适用于:

let elements: any = document.querySelectorAll(".class");
for(let ele of elements) {
     // do stuff
}

我猜错误在
forEach
行,而不是
querySelector
行。问题在于它所说的是什么,即节点列表不是数组类型。请尝试
[…li]
数组。从(li)
。还有,为什么要循环两次,一次使用
forEach
,然后再次使用
for…of
?@torazaburo在删除for每个循环后仍然会得到相同的错误。正如我所说,您必须对(数组的var元素.from(li))执行
。或者,如果您没有可用的
数组.from
,则
用于(var x=0;x
。我猜错误在
forEach
行,而不是
querySelector
行。问题在于它所说的是什么,即节点列表不是数组类型。请尝试
[…li]
数组。从(li)
。还有,为什么要循环两次,一次使用
forEach
,然后再次使用
for…of
?@torazaburo在删除for每个循环后仍然会得到相同的错误。正如我所说,您必须对(数组的var元素.from(li))执行
。或者,如果您没有可用的
Array.from
,则为(var x=0;x
。您测试过这个吗?将
li
强制转换为
any
将抑制错误消息,但我不确定它是否解决了潜在的不兼容性问题。您测试过这个吗?将
li
强制转换为
any
将抑制错误消息,但我不确定它是否解决了潜在的不兼容性。奇怪!结果表明,缺少
tsconfig.json
文件将导致
tsc
假定
Array.from
可用,即使它是ES2015功能。我已经纠正了,奇怪!结果表明,缺少
tsconfig.json
文件将导致
tsc
假定
Array.from
可用,即使它是ES2015功能。我已经改正了。