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.
