الدرس 3 من 10
الاتحاد والتضييق
- 11 دقيقة
- 5 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
قيمة بأكثر من شكل
الشرح
معرّف المنتج يصلك أحيانًا رقمًا 42 وأحيانًا نصًّا "ab12". والنوع string | number — الاتحاد — يقول ذلك بالضبط: القيمة من أحد النوعين.
ولا يسمح المترجم إلا بما يشترك فيه الطرفان: id.toUpperCase() خطأ أنواع لأن الأرقام ليس فيها toUpperCase. وهو الانهيار نفسه الذي تقع فيه الجافاسكربت حين يصلها رقم.
والحلّ التضييق: داخل if (typeof id === "number") يعرف المترجم أن id رقم، وفي الفرع الآخر يعرف أنه نصّ. وانتبه إلى أن typeof لا يفرّق بين المصفوفة وnull والكائن: كلها "object".
المطلوب
صِف مُعامل formatId بـ string | number واجعلها تُرجع string: النصّ بأحرف كبيرة بعد # مثل "#AB12"، والرقم مكمّلًا بالأصفار إلى أربع خانات مثل "#0042".
معايير التصحيح
5 معايير- لا أخطاء أنواع
- formatId تقبل نصًّا ورقمًا
- وترفض ما سواهما
- النصّ: formatId("ab12") تُرجع "#AB12"
- الرقم: formatId(42) تُرجع "#0042"