Reputation: 7426
Angular 2.4.4, TypeScript 2.1.5, PhpStorm 2017.2.1 I write this code:
const list = document.querySelectorAll('path.frame-zone');
list.forEach(() => {
But the second line is underlined with a red line and TsLint reports that "property forEach does not exist on type NodeListOf"
But when I ctrl+click the forEach
it gets me to lib.es6.d.ts
where forEach
is declared for interface NodeListOf<TNode extends Node>
Why it won't let me use it? What is wrong?
Upvotes: 62
Views: 67229
Reputation: 256
Have you tried to cast your document.querySelectorAll('path.frame-zone');
with NodeListOf<HTMLDivElement>
?
Upvotes: -1
Reputation: 12228
You can cast it to let compiler know it can be iterated:
(document.querySelectorAll('path.frame-zone') as any as Array<HTMLElement>).forEach();
Upvotes: 15
Reputation: 16164
Just add "dom.iterable"
to tsconfig.json
, so that it looks somewhat like this:
{
"compilerOptions": {
"lib": [
"es6",
"dom",
"dom.iterable"
],
...
Upvotes: 39
Reputation: 4751
You need to convert it to an array:
const frameZones = Array.from(document.querySelectorAll('path.frame-zone'));
frameZones.forEach((...) => {});
Upvotes: 120
Reputation: 159
try to cast it:
const list = (NodeListOf) document.querySelectorAll('path.frame-zone');
ah typescript maybe like this:
const list = <NodeListOf> document.querySelectorAll('path.frame-zone');
Upvotes: -3