属性“ innerText”在类型“元素”上不存在

时间:2019-08-19 06:40:42

标签: javascript typescript puppeteer

我正在将Typescript用于Puppeteer。我正在尝试从元素中获取innerText。

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

我遇到了错误:

  

类型“元素”上不存在属性“ 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”

为什么会这样?如何处理?

1 个答案:

答案 0 :(得分:2)

您可以这样解决它:

Presentation

或:

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

更新:

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

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

更清晰的示例如下:

<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会造成混乱。