DJ-*_*ock 7 extension-methods interface typescript puppeteer
我正在尝试用一种方法扩展puppeteer的类 ElementHandle 。我已经检查了一些示例并编写了简单的代码,就像在这个答案中一样。
但是 VSCode 向我显示了更改 ElementHandle 原型的行的错误:
'ElementHandle' 仅指一种类型,但在此处用作值。ts(2693)
我该如何解决?
我的代码:
import { ElementHandle } from 'puppeteer';
declare module 'puppeteer' {
interface ElementHandle {
scrollIntoView(): void;
}
}
ElementHandle.prototype.scrollIntoView = async function (): Promise<void> {
await this._scrollIntoViewIfNeeded();
}
Run Code Online (Sandbox Code Playgroud)
ElementHandle 类:https : //github.com/puppeteer/puppeteer/blob/master/src/JSHandle.js
您看到的错误消息是准确的:对于 Puppeter,ElementHandle指的是类型,而不是类/对象/值。
在 Typescript 中,类型仅在编译时存在。然后,在运行时,它们根本不存在,它们被完全删除。
为此,特发表声明:
ElementHandle.prototype.scrollIntoView = async function() { /* */ }
Run Code Online (Sandbox Code Playgroud)
行不通。由于 ElementHandle 是唯一类型,因此它在运行时不会存在,因此您无法发送消息.prototype来尝试访问它。
这里的解释是,这ElementHandle只是puppeteer 处理的一些实体的抽象表示,而不是具有实体和/或可以用作模板的引用,如类。
因此,不可能像您想要的那样为其分配一个函数(或任何值)来“扩展”它。
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |