الدرس 5 من 10

الاتحادات المميَّزة

هدف الدرس

الحالة المستحيلة لا يمكن كتابتها

01

الشرح

الكائن الواحد الذي يجمع حقلًا اختياريًّا لكل احتمال، مثل { kind: string; radius?: number; width?: number }، يبدو مرنًا، لكنه يقبل دائرة بلا نصف قطر ويُلزمك بكتابة ! كلما قرأت حقلًا، و! مجرّد وعد تعطيه للمترجم ولا يتحقّق منه أحد.

أما الاتحاد المميَّز (discriminated union) فيصف كل حالة وحدها، ويضع في كل منها حقلًا مشتركًا قيمته ثابتة، هكذا: { kind: "circle"; radius: number } | { kind: "rect"; width: number; height: number }، ويكفي أن تفحص kind ليعرف المترجم في أيّ فرع أنت.

فداخل case "circle": يكون shape.radius رقمًا مضمونًا، ويصير shape.width خطأً في الأنواع لأنه غير موجود في الدائرة فعلًا.

02

المطلوب

أعد تعريف Shape ليكون اتحادًا من { kind: "circle"; radius: number } و{ kind: "rect"; width: number; height: number }، ثم اكتب area باستعمال switch على shape.kind دون أي !.

الفحوص

5 فحوص
  1. لا توجد أخطاء في الأنواع
  2. مساحة الدائرة صحيحة
  3. مساحة المستطيل صحيحة
  4. المترجم يعرف حقول كل فرع
  5. دائرة بلا radius مرفوضة
03

تلميحات

0/3
main.ts
المخرجاتTypeScript 5.9

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

–/5

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

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