javascript - A propriedade 'innerText' não existe no tipo 'Element'
Estou usando Typescript com Puppeteer. Estou tentando obter o innerText de um elemento.
const data = await page.$eval(selector, node => node.innerText);
Estou recebendo o erro:
A propriedade 'innerText' não existe no tipo 'Element'
Eu tentei fazer o cast para HTMLElement como descrito nesta pergunta: erro "Propriedade 'innerText' não existe no tipo 'EventTarget'?"
const data = await page.$eval(selector, <HTMLElement>(node: HTMLElement) => node.innerText);
Bem como criar minha própria Interface assim:
interface TextElement extends Element {
innerText: string;
}
Mas em cada caso estou recebendo o erro de que innerText não existe nesse tipo específico.
A propriedade 'innerText' não existe no tipo 'HTMLElement'
Por que isso está acontecendo e como lidar com isso?
Resposta #1
Você pode consertar assim:
const data = await page.$eval(selector, node => (node as HTMLElement).innerText);
ou :
const data = await page.$eval(selector, node => (<HTMLElement>node).innerText);
ATUALIZAÇÃO:
Então, após algumas trocas no Github, fica claro por que a sintaxe dessa pergunta não funciona. Na verdade, ela define uma função genérica anônima.
<HTMLElement>(node: HTMLElement) => node.innerText
Um exemplo mais claro seria o seguinte:
function myFunction<T>(node: T) {
node.innerText; // Property 'innerText' does not exist on 'T'
}
const data = await page.$eval(selector, myFunction);
A nomeação infeliz de T como HTMLElement cria confusão.
Resposta #2
Para aqueles que precisam corrigir este erro para qualquer elemento retornado de querySelector:
const el = document.querySelector<HTMLElement>('#app');
if (el) {
el.innerText = content;
}
