الواجهات (Interfaces) مقابل الأسماء المستعارة للأنواع (Type Aliases)
جزء من قسم Introduction To TypeScript في رحلة JavaScript على Coddy. الدرس 40 من 73.
الآن بعد أن تعلمت عن كل من type aliases و interfaces لتعريف أشكال الكائنات، من المهم فهم متى يجب استخدام كل نهج. فبينما يخدمان أغراضاً متشابهة، إلا أن هناك اختلافات رئيسية يمكن أن تؤثر على اختيارك.
أوجه التشابه: يمكن لكل من الواجهات (interfaces) والأسماء المستعارة للأنواع (type aliases) تحديد هيكل الكائنات بنفس المستوى من أمان النوع (type safety). يمكنك استخدام أي من النهجين لتحديد الخصائص المطلوبة، والخصائص الاختيارية، وخصائص القراءة فقط (readonly). كما يدعم كلاهما التوسيع أو الدمج مع أنواع أخرى.
الفرق الرئيسي - دمج التصريحات (Declaration Merging): الفرق الأكثر أهمية هو أن interfaces تدعم دمج التصريحات (declaration merging)، بينما لا تدعم type aliases ذلك. هذا يعني أنه يمكنك التصريح عن نفس interface عدة مرات، وسيقوم TypeScript تلقائيًا بدمج جميع التصريحات في interface واحدة:
interface User {
name: string;
}
interface User {
age: number;
}
// يقوم TypeScript بدمج هذه في:
// interface User {
// name: string;
// age: number;
// }إذا حاولت اتباع نفس النهج مع الأسماء المستعارة للأنواع (type aliases)، فسيقوم TypeScript بإظهار خطأ يتعلق بالمعرفات المكررة. تجعل ميزة الدمج هذه الواجهات (interfaces) مفيدة بشكل خاص عند العمل مع المكتبات أو عندما تحتاج إلى توسيع تعريفات الأنواع الموجودة عبر أجزاء مختلفة من قاعدة الكود الخاصة بك.
متى تختار: استخدم الواجهات (interfaces) عند تعريف أشكال الكائنات التي قد تحتاج إلى توسيعها أو دمجها لاحقًا. استخدم الأسماء المستعارة للأنواع (type aliases) عندما تحتاج إلى عمليات أنواع أكثر تعقيدًا مثل الاتحادات (unions) أو التقاطعات (intersections) أو عند العمل مع الأنواع الأولية (primitive types).
جرّب بنفسك
لا يتضمّن هذا الدرس تحدّيًا برمجيًا.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Introduction To 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 عبر الإنترنت