Тип 'HTMLCollectionOf ‹HTMLCanvasElement›' должен иметь метод '[Symbol.iterator] ()', который возвращает итератор.

Я создаю массив с

const myCanvas = documen.getElementsByTagName('canvas')

что это действительно работает. Он возвращает мне что-то вроде этого:

images: [
0: canvas,
1: canvas,
2: canvas
]

Это для проекта Typescript, я хочу повторить этот массив и преобразовать каждое изображение, чтобы зарегистрировать его.

Нравится:

for (const image of myCanvas) {
      console.log(canvas.toDataURL());
    }

(Я не использую foreach, потому что он не работает с типом HTMLCollectionOf)

Мне нужно повторить HTMLCollection, которую мне возвращает getElementsByTagName. Результатом будет Тип "HTMLCollectionOf" должен иметь метод "Symbol.iterator", который возвращает итератор.

error


person Jgascona    schedule 23.08.2019    source источник


Ответы (4)


Чтобы выполнить итерацию таким образом, вам нужно установить compilerOptions следующим образом:

"compilerOptions": {
        // ...
        "target": "ES6",
        "lib": [
            "DOM",
            "DOM.Iterable",
            "ES6"
        ]
        // ...
    }
person Lessneek    schedule 21.02.2020
comment
Если вы используете VS Code, вам может потребоваться перезапустить среду IDE, чтобы настройки вступили в силу. - person Josh Habdas; 24.06.2020
comment
Спасибо, мне также пришлось перезапустить мой слушатель сборки в реальном времени wp-scripts, вы также можете заменить ES6 на esnext - person redanimalwar; 19.11.2020

У меня есть это в моем tsconfig.json:

"compilerOptions": {
        // ...
        "target": "es2015",
        "module": "es2020",
        "lib": [
          "es2018",
          "dom"
        ]
        // ...
    }

Я добавляю dom.Iterable к lib, и вывод пропадает. Теперь это выглядит так:

"compilerOptions": {
          // ...
          "target": "es2015",
          "module": "es2020",
          "lib": [
            "es2018",
            "dom",
            "dom.Iterable"
          ]
          // ...
        }
person Ilija Iličić    schedule 24.12.2020


Вы можете использовать for-of так:

const menus = document.getElementsByClassName('navbar-menu');
for (const menusKey of Object.keys(menus)) {
  console.log(menus[menusKey]);
}
person AnasSafi    schedule 23.03.2021