توسيع الواجهات والأنواع
جزء من قسم مقدمة إلى TypeScript في رحلة JavaScript على Coddy. الدرس 42 من 73.
بدلاً من تكرار الكود، توفر TypeScript آليات قوية لبناء أنواع جديدة بناءً على الأنواع الموجودة من خلال الوراثة.
بالنسبة للواجهات، يمكنك استخدام الكلمة المفتاحية extends لإنشاء واجهة جديدة ترث جميع الخصائص من واجهة أساسية:
interface Vehicle {
brand: string;
year: number;
}
interface Car extends Vehicle {
doors: number;
}
// تمتلك Car الآن: brand و year و doorsبالنسبة لأسماء الأنواع المستعارة (type aliases)، يمكنك تحقيق نفس النتيجة باستخدام أنواع التقاطع (intersection types) مع عامل التشغيل &:
type Vehicle = {
brand: string;
year: number;
};
type Car = Vehicle & {
doors: number;
};
// تمتلك Car نفس خصائص مثال الواجهة (interface)كلا النهجين ينشئان أنواعاً جديدة تحتوي على جميع الخصائص من النوع الأساسي بالإضافة إلى أي خصائص إضافية تقوم بتعريفها. هذا يعزز إعادة استخدام الكود ويساعد في الحفاظ على الاتساق عبر الأنواع ذات الصلة في تطبيقك.
التحدي
سهلقم بإنشاء واجهة أساسية (interface) باسم Employee تحتوي على الخصائص التالية:
idمن نوعnumbernameمن نوعstringdepartmentمن نوعstring
قم بإنشاء واجهة باسم Manager ترث من Employee وتضيف الخصائص التالية:
teamSizeمن نوعnumberbudgetمن نوعnumber
قم بإنشاء اسم مستعار للنوع (type alias) باسم Contact يحتوي على الخصائص التالية:
emailمن نوعstringphoneمن نوعstring
قم بإنشاء اسم مستعار للنوع باسم Developer باستخدام أنواع التقاطع (intersection types) يجمع بين Employee و Contact، ويضيف الخصائص التالية:
programmingLanguagesمن نوعstring[]yearsExperienceمن نوعnumber
باستخدام الواجهات والأنواع التي أنشأتها، قم بإنشاء المتغيرات التالية:
- قم بإنشاء متغير باسم
teamLeadمن نوعManagerمع id بقيمة101، و name بقيمة"Alice Johnson"، و department بقيمة"Engineering"، و teamSize بقيمة8، و budget بقيمة250000 - قم بإنشاء متغير باسم
softwareDevمن نوعDeveloperمع id بقيمة102، و name بقيمة"Bob Smith"، و department بقيمة"Engineering"، و email بقيمة"bob.smith@company.com"، و phone بقيمة"555-0123"، و programmingLanguages بقيمة["TypeScript", "Python", "Java"]، و yearsExperience بقيمة5
قم بإنشاء دالة باسم getManagerSummary تقبل معاملًا من نوع Manager وتعيد string بالتنسيق التالي: "[name] manages [teamSize] people with a budget of $[budget]".
قم بإنشاء دالة باسم getDeveloperSkills تقبل معاملًا من نوع Developer وتعيد string بالتنسيق التالي: "[name] knows [programmingLanguages joined with ', '] ([yearsExperience] years experience)".
قم بطباعة المخرجات التالية في أسطر منفصلة:
- استدعِ
getManagerSummaryمعteamLeadواطبع النتيجة - استدعِ
getDeveloperSkillsمعsoftwareDevواطبع النتيجة - اطبع الـ department الخاص بـ
teamLead - اطبع الـ email الخاص بـ
softwareDev
جرّب بنفسك
// TODO: اكتب كودك هنا
// إنشاء واجهة (interface) الموظف (Employee)
// إنشاء واجهة المدير (Manager) التي ترث من الموظف (Employee)
// إنشاء اسم مستعار للنوع (type alias) لبيانات الاتصال (Contact)
// إنشاء اسم مستعار للنوع للمطور (Developer) باستخدام أنواع التقاطع (intersection types)
// إنشاء متغير teamLead من نوع Manager
// إنشاء متغير softwareDev من نوع Developer
// إنشاء دالة getManagerSummary
// إنشاء دالة getDeveloperSkills
// طباعة المخرجات المطلوبةيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس مقدمة إلى 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 عبر الإنترنت