TypeScript Academy · บทเรียน

ชนิดข้อมูลเหตุการณ์ เหตุการณ์แบบกำหนดเอง และการจำกัดชนิดย่อยของ HTMLElement

จัดการเหตุการณ์ DOM ด้วยชนิดข้อมูลที่ถูกต้อง สร้างข้อมูลของ CustomEvent และจำกัดชนิดย่อยของ HTMLElement อย่างปลอดภัย

บทเรียน 2 จาก 38 ขั้นตอน

ชนิดข้อมูลเหตุการณ์ เหตุการณ์แบบกำหนดเอง และการจำกัดชนิดย่อยของ HTMLElement เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 3 บทเรียน

บทนำ

เป้าหมาย: เพิ่มตัวรับฟังเหตุการณ์ที่มีชนิดข้อมูล จำกัดชนิดขององค์ประกอบอย่างปลอดภัย และส่ง CustomEvent พร้อมข้อมูล

  • ชนิดเหตุการณ์ (MouseEvent, KeyboardEvent, InputEvent)
  • จำกัดชนิดของ target/currentTarget ด้วย instanceof
  • ข้อมูลในพร็อพเพอร์ตี detail ของ CustomEvent

ตัวรับฟังเหตุการณ์ที่มีชนิดข้อมูล

ลายเซ็นของตัวรับฟังจะมีชนิดข้อมูลตามชื่อเหตุการณ์: click → MouseEvent และ keydown → KeyboardEvent ควรเพิ่มคำอธิบายชนิดอย่างชัดเจนเพื่อให้เข้าใจได้ง่าย

const btn = document.querySelector("#btn");
if (btn) {
  btn.addEventListener("click", (ev: MouseEvent) => {
    console.log("x=", ev.clientX, "y=", ev.clientY);
  });
}

window.addEventListener("keydown", (ev: KeyboardEvent) => {
  console.log("key=", ev.key);
});

target กับ currentTarget

เป้าหมาย คือแหล่งที่มาเดิมและอาจมีได้หลายชนิด ส่วน currentTarget คือองค์ประกอบที่รับตัวรับฟัง ควรจำกัดชนิดด้วย instanceof ก่อนใช้ส่วนติดต่อโปรแกรมขององค์ประกอบ

document.addEventListener("input", (ev: InputEvent) => {
  const t = ev.target;
  const c = ev.currentTarget; // here: Document
  if (t instanceof HTMLInputElement) {
    console.log("value=", t.value);
  }
});

ข้อมูลของ CustomEvent

CustomEvent<T> บรรจุข้อมูล detail ที่มีชนิดข้อมูล กำหนดและจัดการเหตุการณ์โดยใช้พารามิเตอร์ชนิดทั่วไปที่ตรงกัน

type CounterDetail = { delta: number };

const inc = new CustomEvent<CounterDetail>("counter:change", {
  detail: { delta: 1 }
});

document.dispatchEvent(inc);

document.addEventListener("counter:change", (ev: CustomEvent<CounterDetail>) => {
  console.log("delta=", ev.detail.delta);
});

การจำกัดชนิดย่อย

ใช้ instanceof เพื่อปรับให้เป็นคลาสขององค์ประกอบ HTML เฉพาะ เช่น HTMLButtonElement และ HTMLAnchorElement

document.addEventListener("click", (ev: MouseEvent) => {
  const el = ev.target;
  if (el instanceof HTMLButtonElement) {
    el.disabled = true; // safe: HTMLButtonElement API
  } else if (el instanceof HTMLAnchorElement) {
    console.log("href=", el.href);
  }
});

การมอบหมายเหตุการณ์และตัวตรวจสอบ

การมอบหมายเหตุการณ์: รับฟังเหตุการณ์ในระดับสูง เช่น document จากนั้นค้นหาองค์ประกอบที่ตรงกันและ จำกัดชนิด ก่อนเข้าถึงส่วนติดต่อโปรแกรม

document.addEventListener("click", (ev: MouseEvent) => {
  const el = ev.target as Element | null;
  if (!el) return;
  const btn = el.closest("button.btn-primary");
  if (btn instanceof HTMLButtonElement) {
    console.log("delegated click on:", btn.textContent);
  }
});

ตรวจสอบการจำกัดชนิด

ตรวจสอบอย่างรวดเร็ว: วิธีที่ปลอดภัยที่สุดในการเข้าถึงส่วนติดต่อโปรแกรมเฉพาะขององค์ประกอบในตัวจัดการเหตุการณ์คืออะไร

สรุป

สรุป: ชื่อเหตุการณ์บ่งบอกชนิดเหตุการณ์ ใช้ instanceof เพื่อจำกัดชนิดของ target/currentTarget และส่งข้อมูลผ่าน detail ของ CustomEvent<T>

เริ่มต้นได้ฟรี

เรียนรู้ TypeScript ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
101
บทเรียน
352

คำถามที่พบบ่อย

บทเรียน “ชนิดข้อมูลเหตุการณ์ เหตุการณ์แบบกำหนดเอง และการจำกัดชนิดย่อยของ HTMLElement” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ชนิดข้อมูลเหตุการณ์ เหตุการณ์แบบกำหนดเอง และการจำกัดชนิดย่อยของ HTMLElement” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ชนิดข้อมูลเหตุการณ์ เหตุการณ์แบบกำหนดเอง และการจำกัดชนิดย่อยของ HTMLElement”

จัดการเหตุการณ์ DOM ด้วยชนิดข้อมูลที่ถูกต้อง สร้างข้อมูลของ CustomEvent และจำกัดชนิดย่อยของ HTMLElement อย่างปลอดภัย คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน

บทเรียน “ชนิดข้อมูลเหตุการณ์ เหตุการณ์แบบกำหนดเอง และการจำกัดชนิดย่อยของ HTMLElement” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม

ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ชนิดข้อมูล DOM ของ lib และ querySelector (การตรวจค่า null อย่างเคร่งครัด)
  2. ชนิดข้อมูลเหตุการณ์ เหตุการณ์แบบกำหนดเอง และการจำกัดชนิดย่อยของ HTMLElement
  3. การทำงานกับ FormData, URL และ URLSearchParams
← กลับไปที่ TypeScript Academy