我正在将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”
为什么会这样?如何处理?
答案 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
会造成混乱。