0Pricing
TypeScript Academy · บทเรียน

การทำชนิดให้แคบลงด้วย instanceof และ in

จำกัดชนิดอินสแตนซ์ของคลาสและโครงสร้างออบเจ็กต์ให้แคบลง

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

ยินดีต้อนรับ

`instanceof` จำกัดประเภทอินสแตนซ์ของคลาส ส่วน `in` จำกัดประเภทอ็อบเจ็กต์ตามการมีอยู่ของคุณสมบัติ ทั้งสองอย่างจำเป็นสำหรับการทำงานกับยูเนียนที่ซับซ้อน

การจำกัดประเภทด้วย instanceof

ใช้ `instanceof` เพื่อตรวจสอบว่าค่าเป็นอินสแตนซ์ของคลาสหรือไม่ TypeScript จะจำกัดประเภทให้เป็นคลาสนั้น
function handle(err: Error | string) {
  if (err instanceof Error) {
    console.log(err.message); // err: Error
  } else {
    console.log(err); // err: string
  }
}

instanceof กับคลาสที่กำหนดเอง

instanceof ทำงานร่วมกับคลาสของคุณเองได้เช่นกัน
class Dog { bark() { return 'Woof'; } }
class Cat { meow() { return 'Meow'; } }
function speak(pet: Dog | Cat) {
  if (pet instanceof Dog) pet.bark();
  else pet.meow();
}

instanceof ใช้กับอินเทอร์เฟซไม่ได้

อินเทอร์เฟซจะถูกลบออกขณะทำงาน คุณไม่สามารถใช้ instanceof กับอินเทอร์เฟซได้ ใช้ได้เฉพาะกับคลาสเท่านั้น

ตัวดำเนินการ in

ใช้ `in` เพื่อตรวจสอบว่าคุณสมบัติมีอยู่ในอ็อบเจ็กต์หรือไม่ TypeScript จะจำกัดประเภทยูเนียนให้เหลือสมาชิกที่มีคุณสมบัตินั้น
type Fish = { swim(): void };
type Bird = { fly(): void };
function move(animal: Fish | Bird) {
  if ('swim' in animal) animal.swim();
  else animal.fly();
}

การจำกัดประเภทด้วย in กับคุณสมบัติเสริม

`in` ยังจำกัดประเภทสำหรับคุณสมบัติเสริมได้ โดยจะจำกัดให้เหลือสมาชิกยูเนียนที่คุณสมบัตินั้น CAN มีอยู่
type A = { x?: number };
type B = { y: number };
function process(v: A | B) {
  if ('x' in v) {
    // v: A (has optional x)
  }
}

การรวม instanceof กับ in

คุณสามารถรวมเทคนิคการจำกัดประเภททั้งสองแบบเพื่อจำแนกประเภทที่ซับซ้อนได้
function describe(v: Error | { message: string }) {
  if (v instanceof Error) console.log('Error:', v.stack);
  else if ('message' in v) console.log('Object:', v.message);
}

การใช้ in กับยูเนียนแบบมีตัวจำแนก

เมื่อสมาชิกยูเนียนไม่มีตัวจำแนก การตรวจสอบด้วย `in` สามารถใช้เพื่อจำกัดประเภทในลักษณะเดียวกันได้
type Square = { side: number };
type Circle = { radius: number };
function area(s: Square | Circle): number {
  return 'side' in s ? s.side ** 2 : Math.PI * s.radius ** 2;
}

instanceof ในบล็อก catch

ใช้ instanceof ในบล็อก catch เพื่อแยกประเภทข้อผิดพลาด
try {
  await fetchData();
} catch (err) {
  if (err instanceof NetworkError) { /* retry */ }
  else if (err instanceof AuthError) { /* redirect */ }
  else throw err;
}

การตรวจสอบ Object.prototype เทียบกับ in

ทั้ง `key in obj` และ `Object.prototype.hasOwnProperty.call(obj, key)` ตรวจสอบการมีอยู่ของคุณสมบัติ แต่ `in` จะตรวจสอบคุณสมบัติที่สืบทอดมาด้วย

ลำดับความสำคัญของการจำกัดประเภท

เมื่อมีการตรวจสอบเพื่อจำกัดประเภทหลายรายการ TypeScript จะทำอินเตอร์เซกชันของประเภทที่ถูกจำกัด ทำให้ได้ประเภทที่เฉพาะเจาะจงที่สุดเท่าที่เป็นไปได้

ตรวจสอบความเข้าใจอย่างรวดเร็ว

เหตุใดจึงใช้ `instanceof` เพื่อจำกัดประเภทอินเทอร์เฟซใน TypeScript ไม่ได้

ทบทวน

`instanceof` จำกัดประเภทอินสแตนซ์ของคลาสขณะทำงาน `in` จำกัดประเภทยูเนียนของอ็อบเจ็กต์ตามการมีอยู่ของคุณสมบัติ ใช้ทั้งสองอย่างเมื่อทำงานกับลำดับชั้นคลาสและยูเนียนของอ็อบเจ็กต์เชิงโครงสร้าง

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

บทเรียน “การทำชนิดให้แคบลงด้วย instanceof และ in” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การทำชนิดให้แคบลงด้วย instanceof และ in”

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

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

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

บทเรียน “การทำชนิดให้แคบลงด้วย instanceof และ in” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การทำชนิดให้แคบลงด้วย typeof และค่าความจริง
  2. การทำชนิดให้แคบลงด้วย instanceof และ in
  3. ฟังก์ชันตรวจสอบชนิดที่ผู้ใช้กำหนด
  4. ตรวจสอบความครอบคลุมทุกกรณีด้วย never
← กลับไปที่ TypeScript Academy