الدرس 7 من 10

الأنواع الحرفية

هدف الدرس

مجموعة محدّدة من القيم

01

الشرح

يمكن أن تكون القيمة نفسها نوعًا، فالنوع "md" لا يقبل إلا النصّ "md"، وهذا ما يسمّى النوع الحرفي (literal type). والاتحاد بين عدّة قيم مثل "sm" | "md" | "lg" يصف مجموعة محدّدة من القيم لا يقبل غيرها، وهو ما تُستعمل له enum في لغات أخرى، ويُحذف عند الترجمة فلا يضيف أيّ كود.

وفائدته أنّ الخطأ الإملائي يصبح خطأً في الأنواع، فـpadding("xl") يُرجع الآن 16 دون أيّ تحذير، لأنّ return 16 الأخيرة تلتقط كل قيمة غير "sm" و"md"، أمّا بعد تحديد النوع فسيُرفض قبل التشغيل.

وانتبه إلى اتّساع النوع الذي رأيته في درس الاستنتاج، فنوع let preferred = "lg" هو string لا "lg"، فلا يُقبل حيث يُطلب Size، والحلّ أن تستعمل const، أو تكتب نوع المتغيّر صراحةً: let preferred: Size = "lg".

02

المطلوب

عرّف type Size بالقيم الثلاث واجعله نوع مُعامل padding، ثم أصلح الخطأين اللذين سيكشفهما المترجم، وهما preferred والسطر الذي يمرّر "xl".

الفحوص

6 فحوص
  1. لا توجد أخطاء في الأنواع
  2. النوع Size يقبل القيم الثلاث
  3. النوع Size يرفض أيّ قيمة أخرى
  4. الدالة padding ترفض القيمة الخاطئة
  5. المتغيّر preferred يُقبل حيث يُطلب Size
  6. الدالة padding تُرجع 4 و8 و16
main.ts
المخرجاتTypeScript 5.9

نحمّل مترجم TypeScript الآن. يحدث هذا مرّة واحدة فقط، ثم يحفظه متصفّحك.

–/6

يبدأ الفحص حين تجهز البيئة.

تجد 6 فحوص في بطاقة «المطلوب».