Tìm kiếm trang web

javascript - Thuộc tính 'innerText' không tồn tại trên kiểu 'Element'


Tôi đang sử dụng Typescript cho Puppeteer. Tôi đang cố lấy innerText từ một phần tử.

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

Tôi đang gặp lỗi:

Thuộc tính 'innerText' không tồn tại trên loại 'Element'

Tôi đã thử ép kiểu sang HTMLElement như mô tả trong câu hỏi này: lỗi "Property 'innerText' does not exist on type 'EventTarget'?"

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

Cũng như tạo giao diện của riêng tôi như thế này:

interface TextElement extends Element {
    innerText: string;
}

Nhưng trong mỗi trường hợp tôi đều nhận được lỗi rằng innerText không tồn tại trên loại cụ thể này.

Thuộc tính 'innerText' không tồn tại trên loại 'HTMLElement'

Tại sao điều này lại xảy ra và làm thế nào để xử lý điều này?

Câu trả lời #1

Bạn có thể sửa nó như thế này:

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

hoặc :

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

CẬP NHẬT:

Vậy, sau một số trao đổi trên Github, rõ ràng lý do tại sao cú pháp từ câu hỏi này không hoạt động. Thực tế nó định nghĩa một hàm tổng quát ẩn danh.

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

Ví dụ rõ ràng hơn sẽ như sau:

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

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

Việc đặt tên không may của T thành HTMLElement tạo ra sự nhầm lẫn.

Câu trả lời #2

Đối với những ai cần sửa lỗi này cho bất kỳ phần tử nào được trả về từ querySelector:

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

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

Bài viết liên quan