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

การทำข้อผิดพลาดที่ดักจับให้แคบลง (unknown กับ Error)

จัดการข้อผิดพลาดที่ดักจับและระบุเป็น unknown อย่างปลอดภัย

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

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

ตั้งแต่ TypeScript 4.0 เป็นต้นมา ข้อผิดพลาดที่ดักจับได้จะมีชนิดเป็น unknown ทำให้ต้องจำกัดชนิดอย่างชัดเจนก่อนใช้งานคุณสมบัติของข้อผิดพลาด

การเปลี่ยนแปลงใน TS 4.0

TypeScript 4.0 เปิดตัว useUnknownInCatchVariables โดยข้อผิดพลาดที่ดักจับได้จะมีชนิดเป็น unknown เมื่อใช้โหมดเข้มงวด
// err is now: unknown
try { doSomething(); }
catch (err) {
  // err.message; // Error — cannot access on unknown
}

การจำกัดชนิดด้วย instanceof

ใช้ instanceof Error เพื่อเข้าถึงคุณสมบัติของข้อผิดพลาดอย่างปลอดภัย
catch (err) {
  if (err instanceof Error) {
    console.error(err.message, err.stack);
  } else {
    console.error('Unknown error:', String(err));
  }
}

ตัวตรวจสอบชนิด isError

สร้างตัวตรวจสอบชนิดที่นำกลับมาใช้ซ้ำได้เพื่อจำกัดชนิดของข้อผิดพลาด
function isError(e: unknown): e is Error {
  return e instanceof Error;
}
catch (e) {
  if (isError(e)) console.error(e.message);
}

การจำกัดชนิดข้อผิดพลาดแบบกำหนดเอง

จำกัดชนิดให้เป็นชนิดข้อผิดพลาดแบบกำหนดเองภายในบล็อก catch
catch (err) {
  if (err instanceof NetworkError) { /* retry */ }
  else if (err instanceof AuthError) { /* redirect */ }
  else if (err instanceof Error) { /* generic */ }
  else throw err;
}

useUnknownInCatchVariables

แฟล็กนี้ซึ่งเป็นส่วนหนึ่งของ strict ใน TS 4.4 ขึ้นไป จะบังคับให้ข้อผิดพลาดที่ดักจับได้มีชนิดเป็น unknown
{ "compilerOptions": { "useUnknownInCatchVariables": true } }

ข้อผิดพลาดที่เป็นสตริง

โค้ดบางส่วนโยนสตริงแทนออบเจ็กต์ Error จึงต้องรองรับทั้งสองรูปแบบ
catch (err) {
  const message = err instanceof Error ? err.message : String(err);
  console.error(message);
}

ตัวช่วยการโยนข้อผิดพลาดแบบมีชนิด

สร้างตัวช่วยที่โยน Error ซึ่งมีชนิดกำกับเสมอ
function throwErr(msg: string, code = 500): never {
  const e: AppError = Object.assign(new Error(msg), { statusCode: code });
  throw e;
}

การโยนข้อผิดพลาดที่ไม่ทราบชนิดซ้ำ

โยนข้อผิดพลาดที่คุณไม่สามารถจัดการได้ต่อไป
catch (err) {
  if (err instanceof KnownError) handle(err);
  else throw err; // propagate unknowns
}

ขอบเขตข้อผิดพลาดใน React

ขอบเขตข้อผิดพลาดของ React ต้องจัดการข้อผิดพลาดที่ไม่ทราบชนิดจากเมธอดตลอดอายุการใช้งาน
componentDidCatch(error: unknown, info: ErrorInfo) {
  if (error instanceof Error) logError(error.message);
}

การทดสอบข้อผิดพลาดที่ดักจับได้

ทดสอบการจัดการข้อผิดพลาดด้วยการตรวจสอบแบบมีชนิดกำกับ
test('catches errors', async () => {
  jest.spyOn(api, 'fetch').mockRejectedValue(new NetworkError());
  const result = await safeRun();
  expect(result.ok).toBe(false);
});

ตรวจสอบสั้น ๆ

ชนิดของข้อผิดพลาดที่ดักจับได้ `err` ในโหมดเข้มงวดของ TypeScript 4.4 ขึ้นไปคืออะไร

สรุปทบทวน

การจำกัดชนิดของข้อผิดพลาดที่ดักจับได้ (unknown เทียบกับ Error): คุณได้เรียนรู้แนวคิดสำคัญของหัวข้อนี้และวิธีนำไปใช้ในโปรเจกต์ TypeScript จริงแล้ว

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

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

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

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

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

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

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

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

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

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

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

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

  1. คลาสข้อผิดพลาดและลำดับชั้นที่ระบุชนิด
  2. รูปแบบผลลัพธ์: Ok และ Err
  3. การทำข้อผิดพลาดที่ดักจับให้แคบลง (unknown กับ Error)
  4. การจัดการข้อผิดพลาดในโค้ด TypeScript แบบอะซิงก์
← กลับไปที่ TypeScript Academy