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

คลาสข้อผิดพลาดและลำดับชั้นที่ระบุชนิด

สร้างคลาสข้อผิดพลาดแบบกำหนดเองด้วยชนิดที่มีตัวแยกแยะ

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

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

คลาสข้อผิดพลาดแบบกำหนดเองใน TypeScript มอบลำดับชั้นของชนิดให้ข้อผิดพลาด เพื่อให้จัดการได้อย่างปลอดภัยและเป็นระบบ

การขยาย Error

สร้างคลาส AppError พื้นฐานพร้อม statusCode
class AppError extends Error {
  constructor(public message: string, public statusCode = 500) {
    super(message);
    this.name = 'AppError';
  }
}

ลำดับชั้นของข้อผิดพลาด

สร้างคลาสย่อยที่มีชนิดกำกับสำหรับข้อผิดพลาดแต่ละประเภท
class NotFoundError extends AppError {
  constructor(resource: string) { super(`${resource} not found`, 404); }
}
class ValidationError extends AppError {
  constructor(public fields: string[]) { super('Validation failed', 400); }
}

การใช้ instanceof

ใช้ instanceof เพื่อจำกัดชนิดข้อผิดพลาดให้แคบลงในบล็อก catch
try { doSomething(); }
catch (err) {
  if (err instanceof NotFoundError) res.status(404).json({ error: err.message });
  else if (err instanceof ValidationError) res.status(400).json({ fields: err.fields });
}

ยูเนียนข้อผิดพลาดที่จำแนกด้วยตัวระบุ

ใช้ยูเนียนที่จำแนกด้วยตัวระบุสำหรับการจัดการข้อผิดพลาดที่มีชนิดกำกับ
type AppError =
  | { kind: 'not_found'; resource: string }
  | { kind: 'unauthorized' }
  | { kind: 'validation'; fields: string[] };

ฟังก์ชันสร้างข้อผิดพลาด

สร้างฟังก์ชันโรงงานสำหรับข้อผิดพลาดแต่ละประเภท
const errors = {
  notFound: (r: string) => new NotFoundError(r),
  unauthorized: () => new AppError('Unauthorized', 401),
};

การทำให้ข้อผิดพลาดเป็นอนุกรม

ทำให้ข้อผิดพลาดเป็นอนุกรมสำหรับการตอบกลับ API
function serializeError(err: AppError): Record<string, unknown> {
  return { error: err.message, code: err.statusCode, name: err.name };
}

การกำหนด this.name

กำหนด this.name เป็นชื่อคลาสข้อผิดพลาดเสมอ เพื่อให้ระบุข้อผิดพลาดในบันทึกได้อย่างถูกต้อง
class MyError extends Error {
  readonly name = 'MyError' as const;
  constructor(msg: string) { super(msg); }
}

ข้อผิดพลาดใน Express

ใช้ข้อผิดพลาดแบบกำหนดเองที่มีชนิดกำกับในตัวจัดการข้อผิดพลาดของ Express
app.use((err: unknown, req: Request, res: Response, next: NextFunction) => {
  if (err instanceof AppError) {
    res.status(err.statusCode).json({ error: err.message });
  } else {
    res.status(500).json({ error: 'Internal error' });
  }
});

รูปแบบการบันทึกข้อผิดพลาด

บันทึกข้อผิดพลาดพร้อมชนิดและข้อความเพื่อให้ติดตามตรวจสอบได้
function logError(err: unknown): void {
  if (err instanceof Error) console.error(`[${err.name}] ${err.message}`);
  else console.error('Unknown error:', err);
}

การทดสอบชนิดข้อผิดพลาด

ทดสอบว่าฟังก์ชันส่งข้อผิดพลาดประเภทที่ถูกต้อง
test('throws NotFoundError for missing user', async () => {
  await expect(getUser(999)).rejects.toThrow(NotFoundError);
});

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

คีย์เวิร์ด TypeScript ใดใช้ตรวจสอบว่าออบเจ็กต์เป็นอินสแตนซ์ของคลาสขณะทำงาน

สรุปทบทวน

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

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

บทเรียน “คลาสข้อผิดพลาดและลำดับชั้นที่ระบุชนิด” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “คลาสข้อผิดพลาดและลำดับชั้นที่ระบุชนิด”

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

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

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

บทเรียน “คลาสข้อผิดพลาดและลำดับชั้นที่ระบุชนิด” ใช้เวลานานแค่ไหน

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

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

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

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

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