Javascript 扩展getElementsByClassName或querySelectorAll会在TypeScript中出错
我正在使用以下代码将DOM节点列表转换为数组:Javascript 扩展getElementsByClassName或querySelectorAll会在TypeScript中出错,javascript,arrays,typescript,spread,Javascript,Arrays,Typescript,Spread,我正在使用以下代码将DOM节点列表转换为数组: const elements = [...document.getElementsByClassName(selector)]; 但是对于TypeScript,我得到了如下错误:Type'HTMLCollectionOf'不是数组类型,或者没有返回迭代器的“[Symbol.iterator]”方法。 我不知道在这种情况下我该怎么办。我试着像这样打字: const elements: HTMLElement[] = [...document.get
const elements = [...document.getElementsByClassName(selector)];
但是对于TypeScript,我得到了如下错误:Type'HTMLCollectionOf'不是数组类型,或者没有返回迭代器的“[Symbol.iterator]”方法。
我不知道在这种情况下我该怎么办。我试着像这样打字:
const elements: HTMLElement[] = [...document.getElementsByClassName(selector)];
但它不起作用
这是我的TypeScript配置文件(tsconfig.json
):
问题是默认情况下Typescript将使用.slice 您应该添加标志--downlevelIteration,使其适用于所有迭代器,包括html集合
您应该将dom.iterable作为一个库,它才能工作。您当前没有指定lib,因此根据您的目标使用默认值,这就是它不起作用的原因。在TS 3.5.2上对我起作用(我在
lib.dom.iterable.d.TS
中看到迭代器定义),现代浏览器中的HTMLCollections确实有迭代器。我在使用TypeScript 3.5.2,它在叫喊。可能是配置问题?请参阅问题的更新说明。我已经添加了我的配置。如您所见,该标志设置为true。我编辑了我的答案,如果您添加了正确的LIB,它应该可以工作
{
"compilerOptions": {
"target": "es5",
"module": "umd",
"sourceMap": true,
"outDir": "dist",
"strict": true,
"esModuleInterop": true,
"downlevelIteration": true
}
}