当前位置: 首页 > 知识库问答 >
问题:

扩展第三方类错误的打字稿:ElementHandle仅指一种类型,但在此处用作值

习旻
2023-03-14

我试图用一种方法扩展Puppeter的类ElementHandle。我已经检查了一些例子,并编写了简单的代码,就像这个答案一样。

但是VSCode显示了我更改ElementHandle prototype所在行的一个错误:

“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个答案

廉飞捷
2023-03-14

您看到的错误消息是准确的:在Puppeter的情况下,ElementHandle指的是类型,而不是类/对象/值。

在TypeScript中,类型仅在编译时存在。然后,在运行时,它们根本不存在,它们被完全删除。

因此,声明:

js prettyprint-override">ElementHandle.prototype.scrollIntoView = async function() { /* */ }

不行。由于ElementHandle是唯一的类型,它在运行时不存在,因此无法发送。prototype消息,试图访问它。

这里的一种解释是,ElementHandle只是木偶师处理的一些实体的抽象表示,而不是具有实体和/或可用作模板的引用,如类。

因此,不可能像您希望的那样为其分配函数(或任何值)来“扩展”它。

 类似资料: