Javascript 扩展getElementsByClassName或querySelectorAll会在TypeScript中出错

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

我正在使用以下代码将DOM节点列表转换为数组:

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
    }
}