Puppeteer/Typescript: Bagaimana saya boleh menukar kepada Elemen dalam fungsi eval$halaman?


Saya cuba membaca nilai atribut dalam puppeteer:

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

yang mengakibatkan

ralat TS2339: Sifat 'getAttribute' tidak wujud pada jenis 'Element'.

Apabila saya membuang

node: apa-apa

daripada node: Elemen, ia berfungsi dengan baik.

Sebab untuk ini nampaknya kerana React membebankan jenis itu sebagai

antara muka Elemen { }

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

Bagaimana saya boleh menukar kepada Elemen standard?

Jawapan #1

Anda mungkin kehilangan perpustakaan dom dari tsconfig.json anda. Tambahkannya seperti berikut:

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

Jika menambah pustaka tidak membantu, cuba isytiharkan kaedah yang diperlukan secara eksplisit dengan penggabungan deklarasi:

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

Dengan itu anda boleh memanjangkan jenis sewenang-wenangnya seperti yang anda suka.