TypeScript扩展第三方类错误:ElementHandle仅指类型,但此处正在将其用作值

10

我试图通过添加一个方法来扩展puppeteer的ElementHandle类。我查看了一些示例,并编写了简单的代码,就像这个答案中的代码一样。

但是在我更改ElementHandle原型的代码行上,VSCode向我显示错误:

'ElementHandle'仅表示类型,但在此处被用作值.ts(2693)

我该如何修复它?

我的代码:

import { ElementHandle } from 'puppeteer';

declare module 'puppeteer' {
    interface ElementHandle {
        scrollIntoView(): void;
    }
}

ElementHandle.prototype.scrollIntoView = async function (): Promise<void> {
    await this._scrollIntoViewIfNeeded();
}

ElementHandle类: https://github.com/puppeteer/puppeteer/blob/master/src/JSHandle.js
1个回答

3
你看到的错误信息是准确的:在Puppeter的情况下,ElementHandle指的是一种类型,而不是一个类/对象/值。
在Typescript中,类型仅存在于编译时。然后,在运行时,它们根本不存在,它们完全被删除。
因此,这个语句:
ElementHandle.prototype.scrollIntoView = async function() { /* */ }

无法实现。由于ElementHandle仅是一种类型,因此在运行时它不存在,因此您无法发送.prototype消息以尝试访问它。
这里的解释是,ElementHandle只是puppeteer处理的某些实体的抽象表示,而不是具有实体和/或可以用作类似类的模板的引用。
因此,不可能像您想要的那样分配函数(或任何值),以"扩展"它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接