ชนิดข้อมูลเหตุการณ์ เหตุการณ์แบบกำหนดเอง และการจำกัดชนิดย่อยของ HTMLElement
จัดการเหตุการณ์ DOM ด้วยชนิดข้อมูลที่ถูกต้อง สร้างข้อมูลของ CustomEvent และจำกัดชนิดย่อยของ HTMLElement อย่างปลอดภัย
ชนิดข้อมูลเหตุการณ์ เหตุการณ์แบบกำหนดเอง และการจำกัดชนิดย่อยของ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ชนิดข้อมูล DOM ของ lib และ querySelector (การตรวจค่า null อย่างเคร่งครัด)
- ชนิดข้อมูลเหตุการณ์ เหตุการณ์แบบกำหนดเอง และการจำกัดชนิดย่อยของ HTMLElement
- การทำงานกับ FormData, URL และ URLSearchParams