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

การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch

กำหนดชนิดข้อมูลพารามิเตอร์ catch เป็น unknown จากนั้นจำกัดชนิดข้อมูลด้วย instanceof/typeof หรือตัวตรวจแบบกำหนดเองเพื่อจัดการข้อผิดพลาดอย่างปลอดภัย

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

บทนำ

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

unknown และ instanceof

เริ่มต้นด้วย unknown จำกัดชนิดด้วย instanceof Error เพื่อเข้าถึง message stack และข้อมูลอื่น ๆ

async function boom(): Promise<void> { throw new Error("boom") }

async function run() {
  try {
    await boom();
  } catch (e: unknown) {
    if (e instanceof Error) {
      console.error("Handled:", e.message);
    } else {
      console.error("Non-Error thrown:", e);
    }
  }
}

run();

ใช้ typeof กับชนิดพื้นฐาน

โค้ดบางส่วนอาจส่งข้อความหรือชนิดพื้นฐานอื่น ๆ ออกมาเป็นข้อผิดพลาด ใช้ typeof เพื่อจำกัดชนิดและจัดการอย่างเหมาะสม

function throwString() { throw "bad" }

try {
  throwString();
} catch (e: unknown) {
  if (typeof e === "string") {
    console.warn("string error:", e.toUpperCase());
  } else {
    console.warn("other error", e);
  }
}

ตัวตรวจสอบแบบกำหนดเอง

สร้าง ตัวตรวจสอบชนิดที่ผู้ใช้กำหนด เพื่อจดจำโครงสร้างที่ “คล้ายข้อผิดพลาด” ซึ่งมาจากชั้นต่าง ๆ

type ErrorLike = { message: string; code?: string };

function isErrorLike(e: unknown): e is ErrorLike {
  return !!e && typeof e === "object" && "message" in e;
}

try {
  throw { message: "oops", code: "E_BAD" };
} catch (e: unknown) {
  if (isErrorLike(e)) {
    console.error(e.message, e.code ?? "no-code");
  } else {
    console.error("unknown error", e);
  }
}

การบันทึกอย่างปลอดภัย

รวมการจัดการข้อผิดพลาดไว้ที่ศูนย์กลาง ตัวช่วยขนาดเล็กจะจำกัดชนิดและบันทึกข้อมูลอย่างปลอดภัย เพื่อหลีกเลี่ยงการล้มเหลวระหว่างการบันทึกเอง

function logErrorSafe(e: unknown): void {
  if (e instanceof Error) {
    console.error("Error:", e.message);
  } else if (typeof e === "string") {
    console.error("Error(string):", e);
  } else {
    try {
      console.error("Error(obj):", JSON.stringify(e));
    } catch {
      console.error("Error(unknown)");
    }
  }
}

try { throw { oops: true } } catch (e: unknown) { logErrorSafe(e) }

เคล็ดลับ

เคล็ดลับ:

  • ควรใช้ unknown ใน catch
  • จำกัดชนิดด้วย instanceof typeof หรือตัวตรวจสอบชนิด
  • อย่าคิดว่าค่าจะเป็น Error เสมอ เพราะโค้ดจากบุคคลที่สามอาจส่งค่าใด ๆ ออกมาเป็นข้อผิดพลาดได้

ตรวจสอบการระบุชนิดของข้อผิดพลาด

ตรวจสอบอย่างรวดเร็ว: เหตุใดจึงควรใช้ unknown ใน catch

สรุป

สรุป: จับข้อผิดพลาดเป็น unknown จำกัดชนิดด้วย instanceof/typeof หรือตัวตรวจสอบแบบกำหนดเอง และรวมการบันทึกอย่างปลอดภัยไว้ที่ศูนย์กลาง

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

บทเรียน “การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch”

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

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

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

บทเรียน “การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch” ใช้เวลานานแค่ไหน

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

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

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

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

  1. Promise และการกำหนดชนิดข้อมูล async/await
  2. การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch
  3. รูปแบบการทำงานพร้อมกัน (all/settled/race) และชนิดข้อมูล
← กลับไปที่ TypeScript Academy