Menu
CoddyTech

Função para Buscar um Item por ID

Parte da seção Introdução ao TypeScript do Journey de JavaScript da Coddy. Lição 65 de 73.

challenge icon

Desafio

Fácil

Você recebeu o seguinte do desafio anterior:

  • A interface genérica InventoryItem<T> com as propriedades id, quantity e details
  • A função genérica addItem que adiciona itens a arrays de inventário
  • Vários itens de inventário e arrays de inventário atualizados

Crie uma função genérica chamada findItemById que pesquise um item em um array de inventário pelo seu ID.

A função deve:

  • Usar um parâmetro de tipo genérico T
  • Aceitar um parâmetro inventory do tipo InventoryItem<T>[]
  • Aceitar um parâmetro id do tipo number
  • Retornar o item encontrado do tipo InventoryItem<T> ou undefined se não for encontrado
  • Ter uma anotação explícita do tipo de retorno InventoryItem<T> | undefined

Crie inventários de teste:

  • Crie mixedBookInventory como um array contendo:
    • Um item com id: 10, quantity: 3, details: { title: "JavaScript Basics", author: "Alice Brown" }
    • Um item com id: 11, quantity: 7, details: { title: "React Fundamentals", author: "Bob Wilson" }
    • Um item com id: 12, quantity: 2, details: { title: "Node.js Guide", author: "Carol Davis" }
  • Crie mixedElectronicInventory como um array contendo:
    • Um item com id: 20, quantity: 5, details: { brand: "Samsung", model: "Galaxy S23" }
    • Um item com id: 21, quantity: 1, details: { brand: "Apple", model: "iPhone 15" }

Teste sua função e imprima as seguintes saídas:

  • Encontre o item com ID 11 em mixedBookInventory e imprima o details.title do resultado (ou undefined se não for encontrado)
  • Encontre o item com ID 20 em mixedElectronicInventory e imprima o details.brand do resultado (ou undefined se não for encontrado)
  • Encontre o item com ID 99 em mixedBookInventory e imprima o resultado (deve ser undefined)
  • Encontre o item com ID 12 em mixedBookInventory e imprima o quantity do resultado (ou undefined se não for encontrado)
  • Encontre o item com ID 21 em mixedElectronicInventory e imprima o details.model do resultado (ou undefined se não for encontrado)
  • Encontre o item com ID 10 em mixedBookInventory e imprima o id do resultado (ou undefined se não for encontrado)
  • Encontre o item com ID 50 em mixedElectronicInventory e imprima o resultado (deve ser undefined)

Experimente você mesmo

// Generic interface from previous challenge
interface InventoryItem<T> {
  id: number;
  quantity: number;
  details: T;
}

// Items from previous challenge
const bookItem: InventoryItem<{ title: string; author: string }> = {
  id: 1,
  quantity: 5,
  details: { title: "TypeScript Handbook", author: "John Doe" }
};

const electronicItem: InventoryItem<{ brand: string; model: string }> = {
  id: 2,
  quantity: 3,
  details: { brand: "TechCorp", model: "X100" }
};

const clothingItem: InventoryItem<{ size: string; color: string }> = {
  id: 3,
  quantity: 10,
  details: { size: "M", color: "Blue" }
};

// Generic function to add item to inventory
function addItem<T>(inventory: InventoryItem<T>[], newItem: InventoryItem<T>): InventoryItem<T>[] {
  return [...inventory, newItem];
}

// Create book inventory and new book
const bookInventory = [bookItem];
const newBook: InventoryItem<{ title: string; author: string }> = {
  id: 4,
  quantity: 2,
  details: { title: "Advanced TypeScript", author: "Jane Smith" }
};
const updatedBookInventory = addItem(bookInventory, newBook);

// Create electronic inventory and new electronic
const electronicInventory = [electronicItem];
const newElectronic: InventoryItem<{ brand: string; model: string }> = {
  id: 5,
  quantity: 1,
  details: { brand: "GadgetCorp", model: "Z500" }
};
const updatedElectronicInventory = addItem(electronicInventory, newElectronic);

// Print outputs
console.log(updatedBookInventory.length);
console.log(updatedBookInventory[1].details.title);
console.log(updatedBookInventory[1].details.author);
console.log(updatedElectronicInventory.length);
console.log(updatedElectronicInventory[1].details.brand);
console.log(updatedElectronicInventory[1].details.model);
console.log(updatedElectronicInventory[0].id);
console.log(updatedElectronicInventory[1].quantity);

Todas as lições de Introdução ao TypeScript

Pratique por conta própria: Playground de TypeScript