إنشاء نوع مخزون محدد
جزء من قسم مقدمة إلى TypeScript في رحلة JavaScript على Coddy. الدرس 66 من 73.
التحدي
سهللقد تم تزويدك بما يلي من التحدي السابق:
- الواجهة العامة
InventoryItem<T>مع الخصائصidوquantityوdetails - الدالة العامة
addItemالتي تضيف عناصر إلى مصفوفات المخزون - الدالة العامة
findItemByIdالتي تبحث عن العناصر بواسطة المعرف ID
قم بإنشاء نوعين محددين من الكائنات والأسماء المستعارة لأنواع عناصر المخزون المقابلة لها:
- قم بإنشاء اسم مستعار للنوع
Bookمع الخصائص التالية:titleمن نوعstringauthorمن نوعstring
- قم بإنشاء اسم مستعار للنوع
Electronicمع الخصائص التالية:brandمن نوعstringmodelمن نوعstring
قم بإنشاء أسماء مستعارة للأنواع لعناصر مخزون محددة:
- قم بإنشاء
BookItemكـInventoryItem<Book> - قم بإنشاء
ElectronicItemكـInventoryItem<Electronic>
قم بإنشاء عناصر مخزون ملموسة باستخدام الأسماء المستعارة للأنواع الجديدة:
- قم بإنشاء
specificBookمن نوعBookItemمع:id: 100quantity: 8details: { title: "Clean Code", author: "Robert Martin" }
- قم بإنشاء
specificElectronicمن نوعElectronicItemمع:id: 200quantity: 4details: { brand: "Sony", model: "WH-1000XM4" }
قم بإنشاء مصفوفات مخزون محددة النوع:
- قم بإنشاء
bookStoreمن نوعBookItem[]يحتوي علىspecificBook - قم بإنشاء
electronicStoreمن نوعElectronicItem[]يحتوي علىspecificElectronic
قم بإنشاء عناصر إضافية واختبر نظام الأنواع الخاص بك:
- قم بإنشاء
anotherBookمن نوعBookItemمع:id: 101quantity: 3details: { title: "Design Patterns", author: "Gang of Four" }
- استخدم
addItemلإضافةanotherBookإلىbookStoreوقم بتخزينه فيexpandedBookStore
قم بطباعة المخرجات التالية:
- اطبع
specificBook.details.title - اطبع
specificBook.details.author - اطبع
specificElectronic.details.brand - اطبع
specificElectronic.details.model - اطبع طول
expandedBookStore - استخدم
findItemByIdللعثور على العنصر ذو المعرف 101 فيexpandedBookStoreواطبعdetails.titleللنتيجة - استخدم
findItemByIdللعثور على العنصر ذو المعرف 200 فيelectronicStoreواطبعquantityللنتيجة - اطبع
expandedBookStore[1].details.author
جرّب بنفسك
// Generic interface from previous challenge
interface InventoryItem<T> {
id: number;
quantity: number;
details: T;
}
// Generic function from previous challenge
function addItem<T>(inventory: InventoryItem<T>[], item: InventoryItem<T>): InventoryItem<T>[] {
return [...inventory, item];
}
// Create the generic findItemById function
function findItemById<T>(inventory: InventoryItem<T>[], id: number): InventoryItem<T> | undefined {
return inventory.find(item => item.id === id);
}
// Create test inventories
const mixedBookInventory: InventoryItem<{ title: string; author: string }>[] = [
{ id: 10, quantity: 3, details: { title: "JavaScript Basics", author: "Alice Brown" } },
{ id: 11, quantity: 7, details: { title: "React Fundamentals", author: "Bob Wilson" } },
{ id: 12, quantity: 2, details: { title: "Node.js Guide", author: "Carol Davis" } }
];
const mixedElectronicInventory: InventoryItem<{ brand: string; model: string }>[] = [
{ id: 20, quantity: 5, details: { brand: "Samsung", model: "Galaxy S23" } },
{ id: 21, quantity: 1, details: { brand: "Apple", model: "iPhone 15" } }
];
// Test the function and print outputs
const result1 = findItemById(mixedBookInventory, 11);
console.log(result1 ? result1.details.title : undefined);
const result2 = findItemById(mixedElectronicInventory, 20);
console.log(result2 ? result2.details.brand : undefined);
const result3 = findItemById(mixedBookInventory, 99);
console.log(result3);
const result4 = findItemById(mixedBookInventory, 12);
console.log(result4 ? result4.quantity : undefined);
const result5 = findItemById(mixedElectronicInventory, 21);
console.log(result5 ? result5.details.model : undefined);
const result6 = findItemById(mixedBookInventory, 10);
console.log(result6 ? result6.id : undefined);
const result7 = findItemById(mixedElectronicInventory, 50);
console.log(result7);جميع دروس مقدمة إلى 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