الدرس 5 من 10
أسماء الأنواع
- 12 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
تسمية الأنواع وتركيبها
الشرح
تعطي بـ type اسمًا لأيّ نوع، سواء كان كائنًا أو اتحادًا أو نوعًا أساسيًّا (primitive)، فتستطيع أن تكتب type ID = string | number، أمّا interface فلا يصف إلا أشكال الكائنات.
والعلامة & تصنع تقاطعًا (intersection)، فالنوع A & B يصف قيمة فيها حقول A وحقول B معًا، وبه تبني النوع الكبير من أنواع صغيرة عرّفتها مرّة واحدة، بدل أن تنسخ الحقول فتختلف النسخ عن بعضها مع الوقت.
والقاعدة العملية أن تستعمل interface لأشكال الكائنات، وtype لما سواها وللتركيب. وانتبه إلى أنّ تقاطع حقلين متعارضين مثل { id: string } & { id: number } لا يُرفض عند التعريف، بل يصير id من نوع never، فلا يمكن أن تُنشئ قيمة من هذا النوع أصلًا.
المطلوب
عرّف type ID يقبل نصًّا أو رقمًا واجعله نوع id في Article. ثم عرّف StoredArticle تقاطعًا بين Article وTimestamps، واجعله نوع المُعامل الأوّل في touch ونوع ناتجها، واجعل نوع المُعامل الثاني number.
الفحوص
6 فحوص- لا توجد أخطاء في الأنواع
- النوع ID يقبل نصًّا ورقمًا
- النوع ID لا يقبل غيرهما
- النوع StoredArticle يجمع الحقول الأربعة ويقبل معرّفًا رقميًّا
- الدالة touch ترفض مقالًا بلا createdAt وupdatedAt
- الدالة touch تغيّر updatedAt وحده