Giá trị thuộc tính không tồn tại trên loại HTMLElement

In địa chỉ bộ nhớ của một biến đôi khi hữu ích cho việc gỡ lỗi. Đây là tất cả các cách để lấy giá trị này trong Go

Cách chuyển đến các thẻ trợ giúp trong Vim

Chuyển đến một thẻ dưới con trỏ trong cửa sổ tài liệu Vim (. help) được thực hiện thông qua liên kết phím `Ctrl-]`

Cách xác minh tính hợp lệ của chuỗi JSON trong Go

Nếu bạn đang tìm cách xác minh xem một chuỗi có phải là JSON hợp lệ trong Go bất kể lược đồ của nó hay không, thì bạn đã bao gồm gói `encoding/json`

Cách chuyển hướng đến một URL trong Go

Gói http trong Go cho phép bạn tạo một máy chủ HTTP để nhận các yêu cầu HTTP và chuyển hướng máy khách đến một URL khác

Cập nhật ngày 1 tháng 12 năm 2022

Cách sửa thuộc tính không tồn tại trên EventTarget trong TypeScript

Một lỗi phổ biến xảy ra khi làm việc với DOM trong TypeScript là "thuộc tính 'tên thuộc tính' không tồn tại trên EventTarget". Lỗi này xảy ra khi bạn cố truy cập một thuộc tính trên mục tiêu sự kiện trong TypeScript

Property 'value' does not exist on type 'EventTarget'.

Đây là một ví dụ về đoạn mã gây ra lỗi này

mục lục. ts

function handleClick(event: Event) {
  const { target } = event
  console.log(target.value);
}

const button = document.querySelector('button');
if (button) {
  button.addEventListener('click', handleClick);
}

Kiểm tra mã này trên

Nếu bạn biên dịch đoạn mã trên, trình biên dịch sẽ phát ra hai lỗi

  1. target có thể là null
  2. Thuộc tính
    function handleClick(event: Event) {
      const { target } = event
      console.log(target.value);
    }
    
    const button = document.querySelector('button');
    if (button) {
      button.addEventListener('click', handleClick);
    }
    0 không tồn tại trên loại EventTarget
Giá trị thuộc tính không tồn tại trên loại HTMLElement

Lỗi đầu tiên xảy ra do loại của đối tượng target

function handleClick(event: Event) {
  const { target } = event
  console.log(target.value);
}

const button = document.querySelector('button');
if (button) {
  button.addEventListener('click', handleClick);
}
3 và chúng tôi đang cố truy cập một thuộc tính trên loại nullable không được phép trong TypeScript (nếu
function handleClick(event: Event) {
  const { target } = event
  console.log(target.value);
}

const button = document.querySelector('button');
if (button) {
  button.addEventListener('click', handleClick);
}
4 được bật). Chúng tôi có thể khắc phục lỗi này bằng cách thu hẹp loại chỉ còn EventTarget thông qua một bộ bảo vệ loại

function handleClick(event: Event) {
  const { target } = event
  if (target) console.log(target.value);
}

Lỗi thứ hai xảy ra do loại của đối tượng target hiện là EventTarget và loại này chỉ có ba phương thức.

function handleClick(event: Event) {
  const { target } = event
  console.log(target.value);
}

const button = document.querySelector('button');
if (button) {
  button.addEventListener('click', handleClick);
}
8,
function handleClick(event: Event) {
  const { target } = event
  console.log(target.value);
}

const button = document.querySelector('button');
if (button) {
  button.addEventListener('click', handleClick);
}
9 và
function handleClick(event: Event) {
  const { target } = event
  if (target) console.log(target.value);
}
0. Khi bạn cố gắng truy cập bất kỳ thuộc tính nào khác trên đối tượng target, nó sẽ báo lỗi vì thuộc tính đó sẽ không được nhận dạng trong loại EventTarget

Giá trị thuộc tính không tồn tại trên loại HTMLElement

Mã VS cung cấp tính năng tự động hoàn thành cho các thuộc tính hợp lệ trên EventTarget

Nhưng chúng tôi biết rằng phần tử target là một nút trong trường hợp này, vì vậy chúng tôi cần truyền thông tin đó tới TypeScript để nó có thể cho phép chúng tôi truy cập các thuộc tính hợp lệ cho

function handleClick(event: Event) {
  const { target } = event
  if (target) console.log(target.value);
}
4, loại phù hợp cho các phần tử nút trong TypeScript

Loại EventTarget không kế thừa từ

function handleClick(event: Event) {
  const { target } = event
  if (target) console.log(target.value);
}
6 theo mặc định vì các phần tử HTML không phải là thứ duy nhất có thể là mục tiêu sự kiện. Bạn có quyền xác định loại đối tượng phù hợp của target trước khi TypeScript có thể cho phép bạn truy cập bất kỳ thuộc tính nào không tìm thấy trên EventTarget

Một cách để sửa lỗi này là gõ cast đối tượng target bằng từ khóa

function handleClick(event: Event) {
  const { target } = event
  if (target) console.log((target as HTMLButtonElement).value);
}
0

function handleClick(event: Event) {
  const { target } = event
  if (target) console.log((target as HTMLButtonElement).value);
}

Hoặc bạn có thể ép kiểu từ

function handleClick(event: Event) {
  const { target } = event
  if (target) console.log((target as HTMLButtonElement).value);
}
1 thành
function handleClick(event: Event) {
  const { target } = event
  if (target) console.log(target.value);
}
4 khi tạo biến target

function handleClick(event: Event) {
  const target = event.target as HTMLButtonElement;
  if (target) console.log(target.value);
}

Dù bằng cách nào, mã biên dịch bởi vì bạn đã yêu cầu trình biên dịch coi đối tượng target là một

function handleClick(event: Event) {
  const { target } = event
  if (target) console.log(target.value);
}
4 để nó cho phép bạn truy cập thuộc tính
function handleClick(event: Event) {
  const { target } = event
  console.log(target.value);
}

const button = document.querySelector('button');
if (button) {
  button.addEventListener('click', handleClick);
}
0 vì nó tồn tại trên loại

Một cách khác là xác định loại của đối tượng target trong hàm gọi lại bằng cách sử dụng toán tử giao cắt loại

function handleClick(event: Event) {
  const { target } = event
  if (target) console.log((target as HTMLButtonElement).value);
}
8

function handleClick(event: Event & {
  target: HTMLButtonElement
}) {
  const { target } = event
  console.log(target.value);
}

Điều này có nghĩa là chúng ta không cần sử dụng loại bảo vệ vì loại của target không bao gồm null và loại của các thuộc tính khác trên đối tượng

function handleClick(event: Event) {
  const target = event.target as HTMLButtonElement;
  if (target) console.log(target.value);
}
1 không thay đổi

Nếu bạn cần làm điều này thường xuyên, bạn có thể trừu tượng hóa mẫu này thành loại riêng của nó bằng cách mở rộng loại

function handleClick(event: Event) {
  const { target } = event
  if (target) console.log(target.value);
}
6 với các khái quát

type HTMLElementEvent<T extends HTMLElement> = Event & {
  target: T;
}

function handleClick(event: HTMLElementEvent<HTMLButtonElement>) {
  const { target } = event
  console.log(target.value);
}

Bây giờ, nếu bạn cần truy cập mục tiêu sự kiện trong ngữ cảnh khác, tất cả những gì bạn cần làm là thay thế loại

function handleClick(event: Event) {
  const { target } = event
  if (target) console.log(target.value);
}
4 bằng loại phù hợp cho phần tử

Làm cách nào để lấy giá trị của phần tử HTML trong TypeScript?

Để lấy giá trị của phần tử đầu vào trong TypeScript. .
Chọn phần tử đầu vào
Nhập phần tử đầu vào dưới dạng HTMLInputElement bằng xác nhận loại
Sử dụng thuộc tính giá trị để lấy giá trị của phần tử

Làm cách nào để lấy giá trị HTML trong JS?

Thuộc tính giá trị văn bản đầu vào .
Thay đổi giá trị của trường văn bản. getElementById("myText"). .
Lấy giá trị của một trường văn bản. getElementById("myText"). .
Danh sách thả xuống trong một biểu mẫu. var mylist = tài liệu. .
Một danh sách thả xuống khác. var no = tài liệu. .
Một ví dụ cho thấy sự khác biệt giữa thuộc tính defaultValue và value

Làm cách nào để lấy phần tử HTML theo ID trong TypeScript?

getElementById(elementId. chuỗi). phần tử HTML. null; Truyền cho nó một chuỗi id phần tử và nó sẽ trả về HTMLElement hoặc null. Phương pháp này giới thiệu một trong những loại quan trọng nhất, HTMLElement. Nó đóng vai trò là giao diện cơ sở cho mọi giao diện phần tử khác.