You can fix it like this:
const data = await page.$eval(selector, node => (node as HTMLElement).innerText);
or:
const data = await page.$eval(selector, node => (<HTMLElement>node).innerText);
UPDATE:
So, after some exchange on Github, it’s clear why the syntax from this question does not work. It actually defines anonymous generic function.
<HTMLElement>(node: HTMLElement) => node.innerText
Clearer example would be following:
function myFunction<T>(node: T) {
node.innerText; // Property 'innerText' does not exist on 'T'
}
const data = await page.$eval(selector, myFunction);
Unfortunate naming of T
as HTMLElement
creates confusion.