واجهات الـ Generic
جزء من قسم مقدمة إلى TypeScript في رحلة JavaScript على Coddy. الدرس 61 من 73.
تمامًا كما يمكنك إنشاء دوال عامة، يمكنك أيضًا إنشاء واجهات عامة. يتيح لك ذلك تحديد بنية كائن مع الحفاظ على مرونة أنواع خصائص معينة وإمكانية إعادة استخدامها.
إليك كيفية إنشاء واجهة عامة باستخدام صياغة معلمة النوع نفسها:
interface Container<T> {
value: T;
isEmpty: boolean;
}ينشئ <T> بعد اسم الواجهة معلمةَ نوع يمكن استخدامها في جميع أنحاء تعريف الواجهة. في هذا المثال، ستكون الخاصية value من النوع الذي تحدده عند استخدام الواجهة، بينما تظل isEmpty من النوع الثابت boolean.
عند استخدام واجهة عامة، تحدد النوع الملموس بين قوسين زاويين:
const stringContainer: Container<string> = {
value: "hello",
isEmpty: false
};
const numberContainer: Container<number> = {
value: 42,
isEmpty: false
};التحدي
سهلأنشئ واجهة عامة باسم Result يمكنها الاحتفاظ ببيانات من أي نوع إلى جانب معلومات النجاح.
يجب أن تحتوي الواجهة على خاصيتين:
successمن النوعbooleandataمن النوعT(معامل النوع العام)
أنشئ الكائنات التالية باستخدام واجهتك العامة:
stringResultمن النوعResult<string>معsuccess: trueوdata: "Operation completed"numberResultمن النوعResult<number>معsuccess: trueوdata: 42booleanResultمن النوعResult<boolean>معsuccess: falseوdata: falsearrayResultمن النوعResult<string[]>معsuccess: trueوdata: ["item1", "item2", "item3"]
أنشئ دالة عامة باسم processResult بحيث:
- تستخدم معامل نوع عام
T - تأخذ معاملًا واحدًا هو
resultمن النوعResult<T> - تعيد رسالة نصية
- إذا كانت قيمة
successهيtrue، فأعد"Success: [data]" - إذا كانت قيمة
successهيfalse، فأعد"Failed: [data]"
اطبع المخرجات التالية:
- اطبع نتيجة استدعاء
processResultباستخدامstringResult - اطبع نتيجة استدعاء
processResultباستخدامnumberResult - اطبع نتيجة استدعاء
processResultباستخدامbooleanResult - اطبع نتيجة استدعاء
processResultباستخدامarrayResult - اطبع
stringResult.data
جرّب بنفسك
// TODO: اكتب الكود الخاص بك هنا
// أنشئ الواجهة العامة Result
// أنشئ الكائنات باستخدام واجهة Result
// أنشئ الدالة العامة processResult
// اطبع المخرجات المطلوبةيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس مقدمة إلى 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) إلى الواجهاتملخص: تحديد هياكل الكائنات9Generics: نظرة أولى
المشكلة التي تحلها الـ Genericsإنشاء دالة Generic Identityاستخدام دالة Genericمصفوفات الـ Genericواجهات الـ Genericملخص: تدريب على الدوال العامةتدرّب بنفسك: Playground لـ TypeScript