Puppeteer/Typescript: Cum pot face casting la Element într-o funcție eval$a paginii?


Încerc să citesc valoarea unui atribut în puppeteer:

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

ceea ce duce la

eroare TS2339: Proprietatea 'getAttribute' nu există pe tipul 'Element'.

Când arunc

nod: orice

în loc de node: Element, funcționează bine.

Motivul pentru aceasta pare să fie că React suprasolicită tipul ca

interfață Element { }

în node_modules/@types/react/gloabal.d.ts

Cum pot să fac conversia la Elementul standard?

Răspuns #1

Este posibil să lipsească biblioteca dom din fișierul tău tsconfig.json. Adaug-o astfel:

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

Dacă adăugarea bibliotecii nu ajută, încearcă să declari metoda necesară explicit prin combinarea declarațiilor:

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

Cu asta poți extinde orice tip după cum dorești.