معالجة الأخطاء في TypeScript

معالجة الأخطاء في TypeScript

توضح هذه المقالة كيفية معالجة الأخطاء في TypeScript۔

YouTube Video

معالجة الأخطاء في TypeScript

تتم معالجة الأخطاء في TypeScript بشكل أساسي باستخدام بنية try...catch، تمامًا كما هو الحال في JavaScript۔ في TypeScript، يمكن إدارة محتوى الأخطاء بوضوح أكبر من خلال استنتاج الأنواع۔ يتيح ذلك معالجة أكثر دقة وقابلية للقراءة للأخطاء۔

بنية try...catch

البنية الأساسية لمعالجة الأخطاء كالتالي:۔

 1try {
 2    // Code that may throw an error
 3    throw new Error("Something went wrong!");
 4} catch (error) {
 5    // Catch and handle the error
 6    console.error("Error:", error);
 7} finally {
 8    // Code that runs regardless of whether an error occurred
 9    console.log("Finally block executed.");
10}

معالجة الأخطاء مع الحفاظ على سلامة الأنواع

في TypeScript، تُعامل الأخطاء التي يتم التقاطها داخل كتلة catch على أنها من نوع any، ولكن يُوصى بتحديد النوع المناسب للحصول على معالجة أكثر أمانًا للأخطاء۔ على سبيل المثال، يمكنك تعريف واستخدام نوع خطأ مخصص كالتالي:۔

 1class CustomError extends Error {
 2    constructor(message: string, public errorCode: number) {
 3        super(message);
 4        this.name = "CustomError";
 5    }
 6}
 7
 8try {
 9    throw new CustomError("Invalid operation", 400);
10} catch (error) {
11    if (error instanceof CustomError) {
12        console.error(`Error: ${error.message}, Code: ${error.errorCode}`);
13    } else {
14        console.error("Unknown error occurred");
15    }
16}

في هذا المثال، يتم إنشاء فئة تُسمى CustomError، ويتم رمي خطأ بخصائص مخصصة مثل errorCode۔ داخل كتلة catch، يمكن استخدام instanceof لتحديد نوع الخطأ وتنفيذ المعالجة المناسبة۔

معالجة الأخطاء غير المتزامنة

في TypeScript، يتم استخدام بنية try...catch أيضًا للتعامل مع الأخطاء عند استخدام الدوال غير المتزامنة۔

 1async function fetchData() {
 2    try {
 3        const response = await fetch("https://api.example.com/data");
 4        if (!response.ok) {
 5            throw new Error(`HTTP error! status: ${response.status}`);
 6        }
 7        const data = await response.json();
 8        console.log(data);
 9    } catch (error) {
10        console.error("Failed to fetch data:", error);
11    }
12}
13
14fetchData();

في هذا المثال، يتم جلب البيانات باستخدام fetch، ويتم التحقق من response.ok لإلقاء خطأ إذا لم يكن رمز الحالة OK۔ يتم التقاط الخطأ داخل catch ويتم إخراج السجل المناسب۔

الملخص

في TypeScript، استخدام الأنواع لتوضيح محتوى الأخطاء يجعل معالجة الأخطاء أكثر أمانًا وقابلية للقراءة۔ عند معالجة الأخطاء، من المهم توضيح أنواع الأخطاء التي قد تحدث ومعالجتها تبعًا لذلك۔

خطأ

فئة Error في TypeScript تمتد من فئة Error في JavaScript وهي كائن أساسي لتمثيل الأخطاء۔ من خلال استخدام فئة Error، يمكنك إنشاء كائن يحتوي على رسالة خطأ وتنفيذ معالجة الأخطاء۔

أساسيات فئة Error

يتم استخدام فئة Error كما يلي۔

1const error = new Error("Something went wrong!");
2console.log(error.message); // "Something went wrong!"
3console.log(error.name);    // "Error"

الخصائص

فئة Error تحتوي على الخصائص التالية:۔

  • الرسالة سلسلة نصية تمثل رسالة الخطأ۔
  • الاسم اسم الخطأ۔ افتراضيًا، هو "Error"، ولكنه يمكن تغييره عن طريق إنشاء فئة خطأ مخصصة۔
  • مكدس التتبع معلومات تتبع المكدس تُستخدم في تصحيح الأخطاء۔ سلسلة تشير إلى الكود الذي تسبب في الخطأ عند حدوثه۔

فئة أخطاء مخصصة

يمكن أيضًا توسيع فئة Error وإنشاء فئات الخطأ الخاصة بك۔ هذا مفيد في الحالات التي تتطلب معالجة أخطاء محددة۔ على سبيل المثال، يكون فعالًا عندما تريد معالجة أنواع مختلفة من الأخطاء مثل أخطاء طلبات HTTP أو أخطاء قاعدة البيانات۔

مثال على إنشاء خطأ مخصص

 1class CustomError extends Error {
 2    constructor(message: string, public errorCode: number) {
 3        super(message); // Call the constructor of the parent class 'Error'
 4        this.name = "CustomError"; // Set the name of the error
 5    }
 6}
 7
 8const customError = new CustomError("Invalid operation", 400);
 9console.log(customError.message);   // "Invalid operation"
10console.log(customError.name);      // "CustomError"
11console.log(customError.errorCode); // 400
  • من خلال إنشاء فئة CustomError وإضافة معلومات مثل رموز الأخطاء، يمكنك إدارة معلومات أكثر شمولاً عن الأخطاء۔

وراثة فئة Error

في TypeScript، عند إنشاء فئة خطأ مخصصة بتوسيع فئة Error، هناك بعض النقاط التي يجب الانتباه إليها۔

  1. استدعاء super() في منشئ فئة الخطأ المخصص، يجب عليك استدعاء super() لاستدعاء منشئ فئة Error۔ هذا يضمن أن خصائص message و stack يتم تهيئتها بشكل صحيح۔

  2. إضافة خصائص إذا كنت تريد إضافة معلومات إضافية إلى كائن الخطأ، قم بتعريف خصائص جديدة داخل الفئة۔ على سبيل المثال، في CustomError أعلاه، تمت إضافة خاصية errorCode۔

رفع واستقبال الأخطاء

يمكنك معالجة الأخطاء عن طريق رمي الأخطاء باستخدام فئة Error أو فئة خطأ مخصصة ثم التقاطها۔

 1function riskyOperation() {
 2    throw new Error("Something went wrong during the operation");
 3}
 4
 5try {
 6    riskyOperation();
 7} catch (error) {
 8    if (error instanceof Error) {
 9        console.error(error.message);  // "Something went wrong during the operation"
10        console.error(error.name);     // "Error"
11    }
12}

في حالة الأخطاء المخصصة أيضًا، يمكن استخدام instanceof لتحديد الأخطاء المحددة ومعالجتها بشكل مناسب۔

 1class CustomError extends Error {
 2    constructor(message: string, public errorCode: number) {
 3        super(message);
 4        this.name = "CustomError";
 5    }
 6}
 7
 8try {
 9    throw new CustomError("Database connection failed", 500);
10} catch (error) {
11    if (error instanceof CustomError) {
12        console.error(`Error: ${error.message}, Code: ${error.errorCode}`);
13    }
14}

الملخص

فئة Error في TypeScript هي فئة أساسية لتنفيذ معالجة الأخطاء القياسية۔ علاوة على ذلك، من خلال توسيع فئة Error لإنشاء أخطاء مخصصة، يصبح التعامل مع الأخطاء مرنًا بناءً على أنواع الأخطاء والمعلومات الإضافية۔

يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔

YouTube Video