معالجة الأخطاء في 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
، هناك بعض النقاط التي يجب الانتباه إليها۔
-
استدعاء
super()
في منشئ فئة الخطأ المخصص، يجب عليك استدعاءsuper()
لاستدعاء منشئ فئةError
۔ هذا يضمن أن خصائصmessage
وstack
يتم تهيئتها بشكل صحيح۔ -
إضافة خصائص إذا كنت تريد إضافة معلومات إضافية إلى كائن الخطأ، قم بتعريف خصائص جديدة داخل الفئة۔ على سبيل المثال، في
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 أيضًا.۔