Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الخصائص الاختيارية وخصائص القراءة فقط (Readonly)

جزء من قسم مقدمة إلى TypeScript في رحلة JavaScript على Coddy. الدرس 41 من 73.

يوفر TypeScript معدّلين قويين يمنحانك هذا التحكم: معدّل الخاصية الاختيارية (optional property modifier) و معدّل القراءة فقط (readonly modifier).

يجعل الرمز ? الخاصية اختيارية، مما يعني أنه ليس من الضروري أن تكون موجودة عند إنشاء كائن. هذا مفيد للخصائص التي قد لا تكون مطلوبة دائمًا:

interface User {
  name: string;
  email?: string;  // خاصية اختيارية
}

let user1: User = { name: "Alice" };  // صالح - البريد الإلكتروني اختياري
let user2: User = { name: "Bob", email: "bob@example.com" };  // صالح أيضًا

يمنع المعدل readonly تغيير الخاصية بعد إنشاء الكائن. هذا مثالي للخصائص التي يجب أن تظل ثابتة، مثل المعرفات الفريدة:

interface Product {
  readonly id: number;  // لا يمكن تغييره بعد الإنشاء
  name: string;
}

let product: Product = { id: 1, name: "Laptop" };
product.name = "Gaming Laptop";  // صالح
// product.id = 2;  // خطأ: لا يمكن التعيين لـ 'id' لأنه للقراءة فقط

يمكنك دمج كلا المعدلين في نفس الواجهة، وتعمل هذه المعدلات بشكل متطابق مع كل من الواجهات والأسماء المستعارة للأنواع، مما يمنحك تحكماً دقيقاً في هياكل الكائنات الخاصة بك.

challenge icon

التحدي

سهل

قم بإنشاء واجهة (interface) باسم Book بالخصائص التالية:

  • title من نوع string (مطلوب)
  • isbn من نوع string (للقراءة فقط - readonly)
  • subtitle من نوع string (اختياري)
  • pages من نوع number (مطلوب)
  • publishedYear من نوع number (للقراءة فقط - readonly)
  • genre من نوع string (اختياري)

قم بإنشاء واجهة (interface) باسم Magazine بالخصائص التالية:

  • name من نوع string (مطلوب)
  • issueNumber من نوع number (للقراءة فقط - readonly)
  • topic من نوع string (اختياري)
  • monthlySubscription من نوع boolean (مطلوب)

باستخدام الواجهات التي أنشأتها، قم بإنشاء المتغيرات التالية:

  • قم بإنشاء متغير باسم novel من نوع Book بالعنوان "1984"، و isbn "978-0-452-28423-4"، وعدد صفحات 328، وسنة النشر 1949
  • قم بإنشاء متغير باسم cookbook من نوع Book بالعنوان "The Joy of Cooking"، و isbn "978-0-7432-4626-2"، والعنوان الفرعي "All About Baking"، وعدد صفحات 1132، وسنة النشر 2006، والنوع "Cooking"
  • قم بإنشاء متغير باسم techMag من نوع Magazine بالاسم "Tech Today"، ورقم الإصدار 45، والاشتراك الشهري true
  • قم بإنشاء متغير باسم scienceMag من نوع Magazine بالاسم "Science Weekly"، ورقم الإصدار 12، والموضوع "Climate Change"، والاشتراك الشهري false

قم بإنشاء دالة باسم getBookDetails تقبل معاملًا من نوع Book وتعيد string. يجب أن تعيد الدالة عنوان الكتاب وعدد صفحاته بالتنسيق التالي "[title] - [pages] pages".

قم بإنشاء دالة باسم getMagazineInfo تقبل معاملًا من نوع Magazine وتعيد string. يجب أن تعيد الدالة اسم المجلة ورقم الإصدار بالتنسيق التالي "[name] Issue #[issueNumber]".

اطبع المخرجات التالية في أسطر منفصلة:

  • استدعِ getBookDetails مع novel واطبع النتيجة
  • استدعِ getBookDetails مع cookbook واطبع النتيجة
  • استدعِ getMagazineInfo مع techMag واطبع النتيجة
  • استدعِ getMagazineInfo مع scienceMag واطبع النتيجة
  • اطبع ISBN الخاص بـ novel
  • اطبع حالة الاشتراك لـ techMag (خاصية monthlySubscription)

جرّب بنفسك

// TODO: اكتب كودك هنا

// أنشئ واجهة الكتاب (Book interface)

// أنشئ واجهة المجلة (Magazine interface)

// أنشئ المتغيرات باستخدام الواجهات الخاصة بك

// أنشئ دالة getBookDetails

// أنشئ دالة getMagazineInfo

// اطبع المخرجات المطلوبة
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس مقدمة إلى TypeScript

تدرّب بنفسك: مترجم JavaScript عبر الإنترنت