0
0
Lập trình
Admin Team
Admin Teamtechmely

Dev vs PROD: Ném Lỗi và Fallback với Kiểu never

Đăng vào 5 tháng trước

• 3 phút đọc

Ném Lỗi và Fallback với Kiểu never


📝 Bối cảnh
Bạn nên ném lỗi ngay lập tức (throw error) hay sử dụng cơ chế fallback để xử lý lỗi? Câu trả lời là: cả hai, tùy thuộc vào môi trường.


🚨 Vấn đề khi không sử dụng TypeScript
Khi bạn không sử dụng TypeScript, việc xử lý các trường hợp không xác định có thể dẫn đến những lỗi không được phát hiện. Ví dụ:

javascript Copy
function Theme({ mode }) {
  switch (mode) {
    case "light":
      return <p>Chế độ sáng</p>;
    case "dark":
      return <p>Chế độ tối</p>;
    default:
      return <p>Chế độ không xác định</p>; // ❌ Ẩn lỗi một cách âm thầm
  }
}

Trong đoạn mã trên, nếu mode không phải là "light" hay "dark", ứng dụng sẽ trả về một thông điệp không rõ ràng mà không thông báo lỗi cho nhà phát triển.


✅ Với TypeScript + never – Ném lỗi trong Dev, Fallback trong Prod
Sử dụng TypeScript và kiểu never, bạn có thể nhanh chóng phát hiện lỗi trong môi trường phát triển và sử dụng fallback trong môi trường sản xuất. Dưới đây là cách làm:

typescript Copy
type ThemeMode = "light" | "dark";

function Theme({ mode }: { mode: ThemeMode }) {
  switch (mode) {
    case "light":
      return <p>Chế độ sáng</p>;
    case "dark":
      return <p>Chế độ tối</p>;
    default: {
      const _exhaustive: never = mode;

      if (process.env.NODE_ENV === "development") {
        throw new Error("Chế độ chủ đề chưa được xử lý: " + mode);
      }

      // Trong môi trường sản xuất → fallback
      console.warn("Chế độ chủ đề không mong đợi:", mode);
      return <p>Đang mặc định về Chế độ sáng</p>;
    }
  }
}

🎯 Điểm mấu chốt

  • Trong chế độ phát triển: Ném lỗi → nhanh chóng phát hiện các trường hợp bị thiếu.
  • Trong chế độ sản xuất: Fallback UI + logs → người dùng không gặp phải sự cố.
  • Cân bằng = nghiêm ngặt trong phát triển, kiên cường trong sản xuất.

Thực tiễn tốt nhất

  • Sử dụng TypeScript: TypeScript giúp bạn xác định rõ ràng các kiểu dữ liệu và ngăn chặn lỗi trong mã nguồn.
  • Kiểm tra mã trong môi trường phát triển: Luôn kiểm tra mã trong môi trường phát triển để phát hiện lỗi sớm.

Những cạm bẫy phổ biến

  • Bỏ qua trường hợp mặc định: Luôn luôn xử lý trường hợp mặc định để tránh lỗi trong ứng dụng.
  • Không kiểm tra môi trường: Đảm bảo rằng bạn kiểm tra môi trường (process.env.NODE_ENV) để thực hiện ném lỗi hoặc fallback đúng cách.

Mẹo hiệu suất

  • Giảm thiểu ném lỗi: Ném lỗi có thể làm chậm hiệu suất nếu xảy ra quá thường xuyên. Chỉ ném lỗi khi thực sự cần thiết.
  • Tối ưu hóa fallback: Fallback nên được tối ưu hóa để không làm giảm trải nghiệm người dùng.

Xử lý sự cố

Nếu bạn gặp lỗi khi sử dụng kiểu never, hãy chắc chắn rằng bạn đã xác định tất cả các trường hợp có thể xảy ra trong mã nguồn của mình.

FAQ

1. Tại sao nên sử dụng TypeScript?
TypeScript giúp bạn phát hiện lỗi sớm và cải thiện chất lượng mã nguồn.

2. Khi nào nên ném lỗi và khi nào nên sử dụng fallback?
Nên ném lỗi trong môi trường phát triển để phát hiện lỗi nhanh chóng, và sử dụng fallback trong môi trường sản xuất để tránh làm gián đoạn trải nghiệm của người dùng.


Kết luận

Việc lựa chọn giữa ném lỗi và sử dụng fallback là rất quan trọng trong quá trình phát triển ứng dụng. Sử dụng TypeScript cùng với kiểu never sẽ giúp bạn có được sự cân bằng hoàn hảo giữa việc phát hiện lỗi và cung cấp trải nghiệm người dùng tốt nhất. Hãy áp dụng những gì bạn đã học được trong bài viết này và cải thiện ứng dụng của bạn ngay hôm nay!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào