Menu
CoddyTech
flag Ar iconالعربيةdown icon

إنشاء نوع مخزون محدد

جزء من قسم مقدمة إلى TypeScript في رحلة JavaScript على Coddy. الدرس 66 من 73.

challenge icon

التحدي

سهل

لقد تم تزويدك بما يلي من التحدي السابق:

  • الواجهة العامة InventoryItem<T> مع الخصائص id و quantity و details
  • الدالة العامة addItem التي تضيف عناصر إلى مصفوفات المخزون
  • الدالة العامة findItemById التي تبحث عن العناصر بواسطة المعرف ID

قم بإنشاء نوعين محددين من الكائنات والأسماء المستعارة لأنواع عناصر المخزون المقابلة لها:

  • قم بإنشاء اسم مستعار للنوع Book مع الخصائص التالية:
    • title من نوع string
    • author من نوع string
  • قم بإنشاء اسم مستعار للنوع Electronic مع الخصائص التالية:
    • brand من نوع string
    • model من نوع string

قم بإنشاء أسماء مستعارة للأنواع لعناصر مخزون محددة:

  • قم بإنشاء BookItem كـ InventoryItem<Book>
  • قم بإنشاء ElectronicItem كـ InventoryItem<Electronic>

قم بإنشاء عناصر مخزون ملموسة باستخدام الأسماء المستعارة للأنواع الجديدة:

  • قم بإنشاء specificBook من نوع BookItem مع:
    • id: 100
    • quantity: 8
    • details: { title: "Clean Code", author: "Robert Martin" }
  • قم بإنشاء specificElectronic من نوع ElectronicItem مع:
    • id: 200
    • quantity: 4
    • details: { brand: "Sony", model: "WH-1000XM4" }

قم بإنشاء مصفوفات مخزون محددة النوع:

  • قم بإنشاء bookStore من نوع BookItem[] يحتوي على specificBook
  • قم بإنشاء electronicStore من نوع ElectronicItem[] يحتوي على specificElectronic

قم بإنشاء عناصر إضافية واختبر نظام الأنواع الخاص بك:

  • قم بإنشاء anotherBook من نوع BookItem مع:
    • id: 101
    • quantity: 3
    • details: { 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

تدرّب بنفسك: Playground لـ TypeScript