Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

النوع 'never'

جزء من قسم مقدمة إلى TypeScript في رحلة JavaScript على Coddy. الدرس 70 من 73.

يمثل النوع never القيم التي لا تحدث أبداً. قد يبدو هذا محيراً في البداية، ولكنه في الواقع منطقي تماماً عندما تفكر في سيناريوهات معينة في التعليمات البرمجية الخاصة بك.

يُستخدم النوع never بشكل شائع للدوال التي لا تعود أبداً بشكل طبيعي.

يتضمن ذلك الدوال التي تطرح خطأً دائمًا أو تحتوي على حلقات تكرار لا نهائية:

function throwError(message: string): never {
  throw new Error(message);
}

function infiniteLoop(): never {
  while (true) {
    // هذه الحلقة لا تنتهي أبدًا
  }
}

على عكس void، الذي يشير إلى أن الدالة لا تعيد قيمة ذات معنى، فإن never يشير إلى أن الدالة لا تصل أبداً إلى نقطة نهايتها على الإطلاق. يتوقف التنفيذ إما بسبب رمي خطأ أو يستمر إلى ما لا نهاية.

challenge icon

التحدي

سهل

قم بإنشاء دالة باسم throwError توضح نوع الإرجاع never من خلال رمي خطأ (error) دائماً وعدم العودة بشكل طبيعي أبداً.

يجب أن تقوم الدالة بما يلي:

  • تأخذ معامل message من نوع string
  • ترمي Error جديداً مع الرسالة المقدمة
  • يكون لها نوع إرجاع صريح هو never

قم بإنشاء دالة ثانية باسم handleOperation تقوم بما يلي:

  • تأخذ معاملين: operation من نوع string و value من نوع number
  • تعيد value * 2 إذا كانت العملية هي "double"
  • تعيد value / 2 إذا كانت العملية هي "half"
  • تستدعي throwError مع الرسالة "Invalid operation: [operation]" لأي عملية أخرى
  • يكون لها نوع إرجاع صريح هو number

اختبر دوالك بالعمليات التالية:

  • استدعِ handleOperation("double", 5) واطبع النتيجة
  • استدعِ handleOperation("half", 8) واطبع النتيجة
  • استدعِ handleOperation("triple", 3) واطبع النتيجة (سيؤدي هذا إلى رمي خطأ)

قم بإنشاء حالات اختبار إضافية:

  • استدعِ handleOperation("double", 15) واطبع النتيجة
  • استدعِ handleOperation("half", 20) واطبع النتيجة

جرّب بنفسك

// TODO: اكتب كودك هنا
// never مع نوع إرجاع throwError قم بإنشاء دالة
// number مع نوع إرجاع handleOperation قم بإنشاء دالة

// try-catch اختبر الدوال باستخدام كتل
try {
    console.log(handleOperation("double", 5));
} catch (error) {
    console.log(`Error: ${(error as Error).message}`);
}

try {
    console.log(handleOperation("half", 8));
} catch (error) {
    console.log(`Error: ${(error as Error).message}`);
}

try {
    console.log(handleOperation("triple", 3));
} catch (error) {
    console.log(`Error: ${(error as Error).message}`);
}

try {
    console.log(handleOperation("double", 15));
} catch (error) {
    console.log(`Error: ${(error as Error).message}`);
}

try {
    console.log(handleOperation("half", 20));
} catch (error) {
    console.log(`Error: ${(error as Error).message}`);
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس مقدمة إلى TypeScript

تدرّب بنفسك: مترجم JavaScript عبر الإنترنت