Função para Obter Detalhes do Item
Parte da seção Introdução ao TypeScript do Journey de JavaScript da Coddy. Lição 67 de 73.
Desafio
FácilVocê recebeu o seguinte do desafio anterior:
- A interface genérica
InventoryItem<T>com as propriedadesid,quantityedetails - A função genérica
addItemque adiciona itens a arrays de inventário - A função genérica
findItemByIdque pesquisa itens por ID - Os aliases de tipo
Book,Electronic,BookItemeElectronicItem - Os arrays de inventário
bookStoreeelectronicStore
Crie uma função chamada getItemDetails que receba um InventoryItem<any> e use guardas de tipo para determinar que tipo de item ele é e, em seguida, exiba as informações apropriadas.
A função deve:
- Aceitar um parâmetro
itemdo tipoInventoryItem<any> - Usar o operador
inpara verificar seitem.detailstem uma propriedadetitle - Usar o operador
inpara verificar seitem.detailstem uma propriedadebrand - Exibir
"Book: [title] by [author]"se for um livro - Exibir
"Electronic: [brand] [model]"se for um dispositivo eletrônico - Exibir
"Unknown item type"se não for nenhum dos dois - Ter um tipo de retorno
void
Crie itens de teste:
- Crie
testBookdo tipoInventoryItem<any>com:id: 300quantity: 6details: { title: "TypeScript Handbook", author: "Microsoft Team" }
- Crie
testElectronicdo tipoInventoryItem<any>com:id: 400quantity: 2details: { brand: "Dell", model: "XPS 13" }
- Crie
unknownItemdo tipoInventoryItem<any>com:id: 500quantity: 1details: { color: "Red", size: "Large" }
Teste sua função chamando getItemDetails com cada item de teste:
- Chame
getItemDetails(testBook) - Chame
getItemDetails(testElectronic) - Chame
getItemDetails(unknownItem)
Teste também com itens dos seus stores existentes:
- Use findItemById para encontrar o item com ID 100 em expandedBookStore e, em seguida, chame getItemDetails com o resultado
- Use findItemById para encontrar o item com ID 200 em electronicStore e, em seguida, chame getItemDetails com o resultado
Experimente você mesmo
// Generic interface from previous challenge
interface InventoryItem<T> {
id: number;
quantity: number;
details: T;
}
// Generic functions from previous challenge
function addItem<T>(inventory: InventoryItem<T>[], item: InventoryItem<T>): InventoryItem<T>[] {
return [...inventory, item];
}
function findItemById<T>(inventory: InventoryItem<T>[], id: number): InventoryItem<T> | undefined {
return inventory.find(item => item.id === id);
}
// Create specific object types
type Book = {
title: string;
author: string;
};
type Electronic = {
brand: string;
model: string;
};
// Create type aliases for specific inventory items
type BookItem = InventoryItem<Book>;
type ElectronicItem = InventoryItem<Electronic>;
// Create concrete inventory items
const specificBook: BookItem = {
id: 100,
quantity: 8,
details: { title: "Clean Code", author: "Robert Martin" }
};
const specificElectronic: ElectronicItem = {
id: 200,
quantity: 4,
details: { brand: "Sony", model: "WH-1000XM4" }
};
// Create typed inventory arrays
const bookStore: BookItem[] = [specificBook];
const electronicStore: ElectronicItem[] = [specificElectronic];
// Create additional items and test type system
const anotherBook: BookItem = {
id: 101,
quantity: 3,
details: { title: "Design Patterns", author: "Gang of Four" }
};
const expandedBookStore = addItem(bookStore, anotherBook);
// Print outputs
console.log(specificBook.details.title);
console.log(specificBook.details.author);
console.log(specificElectronic.details.brand);
console.log(specificElectronic.details.model);
console.log(expandedBookStore.length);
console.log(findItemById(expandedBookStore, 101)!.details.title);
console.log(findItemById(electronicStore, 200)!.quantity);
console.log(expandedBookStore[1].details.author);Todas as lições de Introdução ao TypeScript
1Primeiros Passos com TS
O que é TypeScript?Por que usar TypeScript?Seu Primeiro Código TypeScriptProcesso de Compilação e ErrosRecapitulação: Introdução ao TS4Trabalhando com Funções
Tipagem de Parâmetros e RetornosTipagem de Arrow FunctionsO Tipo de Retorno 'void'Parâmetros Opcionais com '?'Valores Padrão de ParâmetrosTipagem de Rest ParametersDefinindo Tipos de FunçõesRecapitulação: Criando Funções Tipadas7Projeto: Uma Lista de Tarefas Simples
Projeto: Definindo a Struct de TarefaFunção para Adicionar uma Tarefa10Projeto: Gerenciamento de Inventário
Projeto: Item de Inventário GenéricoFunção: Adicionar Itens ao Inventário2Tipos Principais
Tipos Básicos: str, num, booleanO Tipo 'any': Válvula de EscapeO Tipo 'unknown'Trabalhando com 'null' e 'undef'Inferência de Tipo na PráticaAnotações de Tipo ExplícitasRecapitulação: Prática de Tipos Principais5Tipos: Aliases, Uniões e Interseções
Aliases de Tipos para PrimitivosTipos de União ('|')Trabalhando com Tipos de UniãoTipos LiteraisTipos de Interseção ('&')Combinando Aliases de TiposRecapitulação: Combinações Avançadas de Tipos3Estrutura de Dados: Arrays e Tuplas
Arrays TipadosModificador 'readonly' para ArraysO que é uma Tupla?Declarando e Acessando TuplasDesestruturando TuplasTuplas ReadonlyArrays Tipados MultidimensionaisSpread Operator com ArraysRecapitulação: Arrays e TuplasPratique por conta própria: Playground de TypeScript