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

توسيع الواجهات والأنواع

جزء من قسم مقدمة إلى 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)

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

challenge icon

التحدي

سهل

قم بإنشاء واجهة أساسية (interface) باسم Employee تحتوي على الخصائص التالية:

  • id من نوع number
  • name من نوع string
  • department من نوع string

قم بإنشاء واجهة باسم Manager ترث من Employee وتضيف الخصائص التالية:

  • teamSize من نوع number
  • budget من نوع number

قم بإنشاء اسم مستعار للنوع (type alias) باسم Contact يحتوي على الخصائص التالية:

  • email من نوع string
  • phone من نوع 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

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

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

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

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