استخدام دالة Generic
جزء من قسم مقدمة إلى TypeScript في رحلة JavaScript على Coddy. الدرس 59 من 73.
هناك طريقتان لاستخدام دالة عامة: باستخدام وسيطات نوع صريحة أو بالسماح لـ TypeScript باستنتاج النوع تلقائيًا.
إليك كيفية استدعاء دالة عامة باستخدام وسائط نوع صريحة:
const result1 = wrapInObject<string>("hello");
const result2 = wrapInObject<number>(42);يخبر <string> و<number> TypeScript صراحةً بنوع البيانات الذي يجب استخدامه لـ T. يمنحك هذا تحكمًا كاملًا في معامل النوع.
ومع ذلك، فإن TypeScript ذكي بما يكفي لاستنتاج النوع من الوسيط الذي تمرّره في معظم الحالات:
const result1 = wrapInObject("hello"); // T inferred as string
const result2 = wrapInObject(42); // T inferred as numberيجعل استدلال الأنواع شيفرتك أنظف وأسهل قراءة مع الحفاظ على أمان الأنواع نفسه. يحلل TypeScript الوسيط ويحدد تلقائيًا ما ينبغي أن تكون عليه T، لذا لا تحتاج إلى كتابة تعليق النوع الصريح إلا إذا أردت تجاوز النوع المستنتج.
التحدي
سهلتم تزويدك بما يلي من التحدي السابق:
- الدالة العامة
wrapInObject<T>التي تأخذ عنصرًا من النوعTوتُرجع{ value: T }
استدعِ الدالة wrapInObject باستخدام كلٍّ من معاملات النوع الصريحة واستنتاج النوع:
استخدام معاملات النوع الصريحة:
- أنشئ متغيرًا
explicitStringباستدعاءwrapInObject<string>باستخدام"TypeScript" - أنشئ متغيرًا
explicitNumberباستدعاءwrapInObject<number>باستخدام25 - أنشئ متغيرًا
explicitBooleanباستدعاءwrapInObject<boolean>باستخدامfalse
استخدام استنتاج النوع:
- أنشئ متغيرًا
inferredStringباستدعاءwrapInObjectباستخدام"Generics"(دع TypeScript يستنتج النوع) - أنشئ متغيرًا
inferredNumberباستدعاءwrapInObjectباستخدام99(دع TypeScript يستنتج النوع) - أنشئ متغيرًا
inferredBooleanباستدعاءwrapInObjectباستخدامtrue(دع TypeScript يستنتج النوع)
اطبع المخرجات التالية:
- اطبع
explicitString.value - اطبع
explicitNumber.value - اطبع
explicitBoolean.value - اطبع
inferredString.value - اطبع
inferredNumber.value - اطبع
inferredBoolean.value
جرّب بنفسك
// دالة عامة من التحدي السابق
function wrapInObject<T>(item: T): { value: T } {
return { value: item };
}
// TODO: اكتب الكود الخاص بك هنا
// أنشئ متغيرات باستخدام وسائط النوع الصريحة
// أنشئ متغيرات باستخدام استدلال النوع
// اطبع النتائجيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس مقدمة إلى 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