Свойство forEach не существует для типа NodeListOf

Angular 2.4.4, TypeScript 2.1.5, PhpStorm 2017.2.1 Я пишу этот код:

const list = document.querySelectorAll('path.frame-zone');
list.forEach(() => {

Но вторая строка подчеркнута красной линией, а TsLint сообщает, что "свойство forEach не существует в типе NodeListOf" Но когда я нажимаю Ctrl + нажимаю forEach, он возвращает меня к lib.es6.d.ts, где forEach объявляется для interface NodeListOf<TNode extends Node>

Почему это не позволит мне использовать его? Что не так?

Ответ 1

Вам нужно преобразовать его в массив:

const frameZones = Array.from(document.querySelectorAll('path.frame-zone'));
frameZones.forEach((...) => {});

Ответ 2

Просто добавьте "dom.iterable" в tsconfig.json, чтобы он выглядел примерно так:

{
    "compilerOptions": {
        "lib": [
            "es6",
            "dom",
            "dom.iterable"
        ],
...

Ответ 3

попробуйте сделать это:

const list = (NodeListOf) document.querySelectorAll('path.frame-zone');

ah typescript может быть примерно так:

const list = <NodeListOf> document.querySelectorAll('path.frame-zone');

Ответ 4

Вы можете привести его, чтобы компилятор знал, что он может быть повторен:

(document.querySelectorAll('path.frame-zone') as any as Array<HTMLElement>).forEach();