الدرس 6 من 10

الحقول الاختيارية وحقول القراءة فقط

هدف الدرس

ما قد يغيب وما لا يتغيّر

01

الشرح

ليس كل حقل موجودًا دائمًا، فـbio?: string يعني أنّ النبذة قد تغيب، ولذلك يكون نوعها عند القراءة string | undefined، ويرفض المترجم p.bio.trim() حتى تتأكّد من وجودها.

أمّا readonly id: number فيمنع إسناد قيمة جديدة إلى الحقل بعد إنشاء الكائن، فيُكتب المعرّف مرّة واحدة ولا يتغيّر، لكنه قيد يفحصه المترجم فقط، ولا يجمّد الكائن عند التشغيل كما يفعل Object.freeze.

واحذر علامة التأكيد !، فـp.bio!.trim() تُسكت المترجم لكنها لا تمنع توقّف البرنامج بخطأ، والصحيح أن تتعامل مع غياب القيمة فعلًا بشرط أو بـ ?. و??.

02

المطلوب

اجعل bio اختياريًّا وid للقراءة فقط، ثم أصلح card بحيث تُرجع displayName وحده إن لم تكن هناك نبذة، وتُرجع displayName + " — " + bio إن وُجدت نبذة، بعد حذف المسافات من طرفيها بـ trim.

الفحوص

5 فحوص
  1. لا توجد أخطاء في الأنواع
  2. يمكن ترك bio
  3. لا يمكن تغيير id بعد الإنشاء
  4. الدالة card تُرجع الاسم وحده إن لم تكن هناك نبذة
  5. الدالة card تضيف النبذة بعد حذف المسافات من طرفيها
main.ts
المخرجاتTypeScript 5.9

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

–/5

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

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