Puppeteer/Typescript: Hur kan jag casta till Element i en eval$-sida funktion?


Jag försöker läsa värdet på ett attribut i puppeteer:

const value = attribute && await page.$eval(selector, (node: Element, name: string) => {
    return node.getAttribute(name)
}, attribute.name);

vilket resulterar i

fel TS2339: Egenskapen 'getAttribute' finns inte på typen 'Element'.

När jag kastar

nod: vilken som helst

istället för node: Element, fungerar det bra.

Anledningen till detta verkar vara att React överbelastar typen som

interface Element { }

i node_modules/@types/react/gloabal.d.ts

Hur kan jag kasta till standard Element?

Svar #1

Du kan sakna dom-biblioteket i din tsconfig.json. Lägg till det på följande sätt:

"lib": [
    "dom",
    "es2018"
],

Om det inte hjälper att lägga till biblioteket, försök deklarera den nödvändiga metoden uttryckligen med deklarationssammanfogning:

interface Element {
    getAttribute(name: string): string;
}

Med det kan du utöka godtycklig typ som du vill.