الخصائص الاختيارية وخصائص القراءة فقط (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' لأنه للقراءة فقطيمكنك دمج كلا المعدلين في نفس الواجهة، وتعمل هذه المعدلات بشكل متطابق مع كل من الواجهات والأسماء المستعارة للأنواع، مما يمنحك تحكماً دقيقاً في هياكل الكائنات الخاصة بك.
التحدي
سهلقم بإنشاء واجهة (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
// اطبع المخرجات المطلوبةيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس مقدمة إلى TypeScript
1البداية مع TS
ما هي TypeScript؟لماذا نستخدم TypeScript؟أول كود TypeScript لكعملية الـ Compilation والأخطاءملخص: مقدمة في TS4التعامل مع الدوال
تحديد أنواع المعاملات وقيم الإرجاعتحديد أنواع Arrow Functionsنوع الإرجاع 'void'المعاملات الاختيارية باستخدام '?'القيم الافتراضية للمعاملاتتحديد أنواع Rest Parametersتعريف أنواع الدوالملخص: بناء دوال محددة الأنواع2الأنواع الأساسية
الأنواع الأساسية: str, num, booleanالنوع 'any': مخرج الهروبالنوع 'unknown'التعامل مع 'null' و 'undef'استنتاج الأنواع في التطبيق العمليتوضيحات الأنواع الصريحةمراجعة: تدريب على الأنواع الأساسية5الأنواع: الأسماء المستعارة، الاتحادات والتقاطعات
الأسماء المستعارة للأنواع الأساسية (Primitives)أنواع الاتحاد ('|')التعامل مع أنواع الاتحادالأنواع الحرفية (Literal Types)أنواع التقاطع ('&')دمج الأسماء المستعارة للأنواعملخص: تركيبات الأنواع المتقدمة3هياكل البيانات: المصفوفات و Tuple
المصفوفات محددة النوع (Typed Arrays)معدل 'readonly' للمصفوفاتما هو الـ Tuple؟تعريف والوصول إلى الـ Tuplesتفكيك الـ Tuples (Destructuring)الـ Tuples للقراءة فقط (Readonly)المصفوفات محددة النوع متعددة الأبعاداستخدام Spread Operator مع المصفوفاتملخص: المصفوفات و Tuples6تحديد أنواع الكائنات والواجهات
توصيف أنواع الكائنات المضمنة (Inline)الأسماء المستعارة للأنواع (Type Aliases) للكائناتمقدمة عن الواجهات (Interfaces)الواجهات (Interfaces) مقابل الأسماء المستعارة للأنواع (Type Aliases)الخصائص الاختيارية وخصائص القراءة فقط (Readonly)توسيع الواجهات والأنواعإضافة الدوال (Methods) إلى الواجهاتملخص: تحديد هياكل الكائناتتدرّب بنفسك: مترجم JavaScript عبر الإنترنت