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