Menu
Coddy logo textTech

Özel Envanter Türü Oluşturma

Coddy'nin JavaScript Journey'sinin TypeScript'e Giriş bölümünün bir parçası — ders 66 / 73.

challenge icon

Görev

Kolay

Önceki meydan okumadan size aşağıdakiler sağlanmıştır:

  • id, quantity ve details özelliklerine sahip genel (generic) arayüz InventoryItem<T>
  • Envanter dizilerine öğe ekleyen genel fonksiyon addItem
  • ID'ye göre öğe arayan genel fonksiyon findItemById

İki özel nesne türü ve bunlara karşılık gelen envanter öğesi tür takma adlarını (type aliases) oluşturun:

  • Şu özelliklere sahip bir Book tür takma adı oluşturun:
    • string türünde title
    • string türünde author
  • Şu özelliklere sahip bir Electronic tür takma adı oluşturun:
    • string türünde brand
    • string türünde model

Özel envanter öğeleri için tür takma adları oluşturun:

  • InventoryItem<Book> olarak BookItem oluşturun
  • InventoryItem<Electronic> olarak ElectronicItem oluşturun

Yeni tür takma adlarınızı kullanarak somut envanter öğeleri oluşturun:

  • Şu özelliklere sahip BookItem türünde specificBook oluşturun:
    • id: 100
    • quantity: 8
    • details: { title: "Clean Code", author: "Robert Martin" }
  • Şu özelliklere sahip ElectronicItem türünde specificElectronic oluşturun:
    • id: 200
    • quantity: 4
    • details: { brand: "Sony", model: "WH-1000XM4" }

Türlendirilmiş envanter dizileri oluşturun:

  • specificBook öğesini içeren BookItem[] türünde bookStore oluşturun
  • specificElectronic öğesini içeren ElectronicItem[] türünde electronicStore oluşturun

Ek öğeler oluşturun ve tür sisteminizi test edin:

  • Şu özelliklere sahip BookItem türünde anotherBook oluşturun:
    • id: 101
    • quantity: 3
    • details: { title: "Design Patterns", author: "Gang of Four" }
  • anotherBook öğesini bookStore dizisine eklemek için addItem kullanın ve sonucu expandedBookStore içinde saklayın

Aşağıdaki çıktıları yazdırın:

  • specificBook.details.title değerini yazdırın
  • specificBook.details.author değerini yazdırın
  • specificElectronic.details.brand değerini yazdırın
  • specificElectronic.details.model değerini yazdırın
  • expandedBookStore dizisinin uzunluğunu yazdırın
  • expandedBookStore içinde ID'si 101 olan öğeyi bulmak için findItemById kullanın ve sonucun details.title değerini yazdırın
  • electronicStore içinde ID'si 200 olan öğeyi bulmak için findItemById kullanın ve sonucun quantity değerini yazdırın
  • expandedBookStore[1].details.author değerini yazdırın

Kendin dene

// 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'e Giriş bölümündeki tüm dersler