typescript 类型“Element”上不存在属性“innerText”

igetnqfo  于 2023-01-06  发布在  TypeScript
关注(0)|答案(2)|浏览(467)

我正在为Puppeteer使用Typescript。我正在尝试从一个元素中获取innerText。

const data = await page.$eval(selector, node => node.innerText);

我得到错误:
类型"Element"上不存在属性"innerText"
我试着像这个问题中描述的那样转换到HTMLElement:error " Property 'innerText' does not exist on type 'EventTarget' "?

const data = await page.$eval(selector, <HTMLElement>(node: HTMLElement) => node.innerText);

以及创建我自己的界面,就像这样:

interface TextElement extends Element {
    innerText: string;
}

但在每种情况下,我都得到innerText在此特定类型上不存在的错误。
类型"HTMLElement"上不存在属性"innerText"
为什么会出现这种情况,如何应对?

xzv2uavs

xzv2uavs1#

您可以按如下方式进行修复:

const data = await page.$eval(selector, node => (node as HTMLElement).innerText);

或:

const data = await page.$eval(selector, node => (<HTMLElement>node).innerText);
  • 更新日期:*

因此,在Github上进行了一些交流之后,很明显这个问题的语法不起作用,它实际上定义了匿名泛型函数。

<HTMLElement>(node: HTMLElement) => node.innerText

更清楚的例子如下:

function myFunction<T>(node: T) {
    node.innerText; // Property 'innerText' does not exist on 'T'
}

const data = await page.$eval(selector, myFunction);

不幸的是,将T命名为HTMLElement会造成混乱。

pjngdqdw

pjngdqdw2#

对于需要修复从querySelector返回的任何元素的此错误的用户:

const el = document.querySelector<HTMLElement>('#app');

if (el) {
  el.innerText = content;
}

相关问题