الدرس 3 من 10

الاتحاد والتضييق

هدف الدرس

قيمة بأكثر من شكل

01

الشرح

معرّف المنتج يصلك أحيانًا رقمًا 42 وأحيانًا نصًّا "ab12". والنوع string | number — الاتحاد — يقول ذلك بالضبط: القيمة من أحد النوعين.

ولا يسمح المترجم إلا بما يشترك فيه الطرفان: id.toUpperCase() خطأ أنواع لأن الأرقام ليس فيها toUpperCase. وهو الانهيار نفسه الذي تقع فيه الجافاسكربت حين يصلها رقم.

والحلّ التضييق: داخل if (typeof id === "number") يعرف المترجم أن id رقم، وفي الفرع الآخر يعرف أنه نصّ. وانتبه إلى أن typeof لا يفرّق بين المصفوفة وnull والكائن: كلها "object".

02

المطلوب

صِف مُعامل formatId بـ string | number واجعلها تُرجع string: النصّ بأحرف كبيرة بعد # مثل "#AB12"، والرقم مكمّلًا بالأصفار إلى أربع خانات مثل "#0042".

معايير التصحيح

5 معايير
  1. لا أخطاء أنواع
  2. formatId تقبل نصًّا ورقمًا
  3. وترفض ما سواهما
  4. النصّ: formatId("ab12") تُرجع "#AB12"
  5. الرقم: formatId(42) تُرجع "#0042"
main.ts
المخرجاتTypeScript 5.9

جارٍ تحميل مترجم TypeScript… مرّة واحدة ثم يحفظه المتصفح.

–/5

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

5 معايير في بطاقة «المطلوب».