الدرس 5 من 10
الاتحادات المميَّزة
- 13 دقيقة
- 5 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
الحالة المستحيلة لا تُكتب
الشرح
كائن واحد بحقول اختيارية لكل الاحتمالات — { kind: string; radius?: number; width?: number } — يبدو مرنًا، لكنه يقبل دائرة بلا نصف قطر، ويُلزمك بـ! عند كل وصول. و! وعدٌ للمترجم لا يتحقّق منه أحد.
الاتحاد المميَّز يصف كل حالة وحدها، ويضع فيها حقلًا حرفيًّا مشتركًا: { kind: "circle"; radius: number } | { kind: "rect"; width: number; height: number }. فحص kind وحده يكفي ليعرف المترجم في أيّ فرع أنت.
داخل case "circle": يصير shape.radius رقمًا مضمونًا، وshape.width خطأ أنواع — لأنه فعلًا غير موجود في الدائرة.
المطلوب
أعد تعريف Shape اتحادًا من { kind: "circle"; radius: number } و{ kind: "rect"; width: number; height: number }، واكتب area بـswitch على shape.kind بلا أي !.
معايير التصحيح
5 معايير- لا أخطاء أنواع
- مساحة الدائرة صحيحة
- مساحة المستطيل صحيحة
- داخل الفرع يعرف المترجم حقوله
- دائرة بلا radius مرفوضة