مشروع: عنصر مخزون عام
جزء من قسم مقدمة إلى TypeScript في رحلة JavaScript على Coddy. الدرس 63 من 73.
مرحباً بك في مشروع TypeScript الأول الخاص بك! أنت على وشك بناء نظام إدارة مخزون عام يوضح القوة الحقيقية للأنواع العامة (generics) في الواقع العملي. سيوضح لك هذا المشروع كيف يمكن للأنواع العامة (generics) إنشاء كود مرن وقابل لإعادة الاستخدام يعمل مع أنواع مختلفة من البيانات مع الحفاظ على السلامة التامة للأنواع (type safety).
إن أساس أي نظام مخزون هو تحديد شكل عنصر المخزون. في النهج التقليدي، قد تقوم بإنشاء واجهات (interfaces) منفصلة للكتب، والإلكترونيات، والملابس، وأنواع المنتجات الأخرى. ولكن مع الـ generics، يمكنك إنشاء هيكل مرن واحد يتكيف مع أي نوع من تفاصيل المنتج.
مهمتك الأولى هي إنشاء واجهة عامة تسمى InventoryItem<T>. ستمثل هذه الواجهة الهيكل المشترك الذي تشترك فيه جميع عناصر المخزون: فهي تحتاج إلى id للتعريف، و quantity لتتبع مستويات المخزون، وخاصية details يمكنها الاحتفاظ بأي نوع من المعلومات الخاصة بالمنتج.
يحدث السحر مع معلمة النوع العام T. يتيح ذلك لخاصية details أن تكون مرنة تماماً - فقد تكون معلومات كتاب، أو مواصفات إلكترونية، أو أي بيانات منتج أخرى - بينما تظل الـ id والـ quantity مكتوبة بشكل ثابت كأرقام عبر جميع عناصر المخزون.
التحدي
سهلأنشئ واجهة عامة (generic interface) باسم InventoryItem تمثل هيكل أي عنصر مخزون في نظام الإدارة الخاص بك.
يجب أن تقوم الواجهة بما يلي:
- استخدام معامل نوع عام
T - أن تحتوي على خاصية
idمن نوعnumber - أن تحتوي على خاصية
quantityمن نوعnumber - أن تحتوي على خاصية
detailsمن نوعT
أنشئ الكائنات التالية باستخدام الواجهة العامة الخاصة بك:
bookItemمن نوعInventoryItem<{ title: string; author: string }>مع:id: 1quantity: 5details: { title: "TypeScript Guide", author: "John Doe" }
electronicItemمن نوعInventoryItem<{ brand: string; model: string }>مع:id: 2quantity: 3details: { brand: "TechCorp", model: "X200" }
clothingItemمن نوعInventoryItem<{ size: string; color: string }>مع:id: 3quantity: 10details: { size: "M", color: "Blue" }
قم بطباعة المخرجات التالية:
- اطبع
bookItem.id - اطبع
bookItem.quantity - اطبع
bookItem.details.title - اطبع
bookItem.details.author - اطبع
electronicItem.details.brand - اطبع
electronicItem.details.model - اطبع
clothingItem.details.size - اطبع
clothingItem.details.color
جرّب بنفسك
// TODO: اكتب كودك هنا
// أنشئ واجهة InventoryItem والكائنات المطلوبة
// اطبع المخرجات المطلوبة
console.log(bookItem.id);
console.log(bookItem.quantity);
console.log(bookItem.details.title);
console.log(bookItem.details.author);
console.log(electronicItem.details.brand);
console.log(electronicItem.details.model);
console.log(clothingItem.details.size);
console.log(clothingItem.details.color);يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس مقدمة إلى TypeScript
1البداية مع TS
ما هي TypeScript؟لماذا نستخدم TypeScript؟أول كود TypeScript لكعملية الـ Compilation والأخطاءملخص: مقدمة في TS4التعامل مع الدوال
تحديد أنواع المعاملات وقيم الإرجاعتحديد أنواع Arrow Functionsنوع الإرجاع 'void'المعاملات الاختيارية باستخدام '?'القيم الافتراضية للمعاملاتتحديد أنواع Rest Parametersتعريف أنواع الدوالملخص: بناء دوال محددة الأنواع7مشروع: قائمة مهام بسيطة
مشروع: تعريف الـ Struct للمهمةدالة لإضافة مهمة10مشروع: إدارة المخزون
مشروع: عنصر مخزون عامدالة: إضافة عناصر إلى المخزون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) إلى الواجهاتملخص: تحديد هياكل الكائناتتدرّب بنفسك: Playground لـ TypeScript