Puppeteer / Typescript:如何在 eval$ 页面函数中转换为 Element?

Puppeteer / Typescript: How can I cast to Element in a eval$ page function?

我尝试在 puppeteer 中读取一个属性的值:

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

结果是

error TS2339: Property 'getAttribute' does not exist on type 'Element'.

我投的时候

node: any

代替节点:元素,它工作正常。

原因好像是 React 重载了类型 as

interface Element { }

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

如何投射到标准元素?

您可能缺少 tsconfig.json 中的 dom 库。添加如下:

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

如果添加库没有帮助,请尝试使用 declaration merging:

显式声明所需的方法
interface Element {
    getAttribute(name: string): string;
}

有了它,您可以根据需要扩展任意类型。