Öğe Detaylarını Getirme Fonksiyonu
Coddy'nin JavaScript Journey'sinin TypeScript'e Giriş bölümünün bir parçası — ders 67 / 73.
Görev
KolayÖnceki meydan okumadan size aşağıdakiler sağlanmıştır:
id,quantityvedetailsözelliklerine sahip genel arayüzInventoryItem<T>- Envanter dizilerine öğe ekleyen genel fonksiyon
addItem - Öğeleri ID'ye göre arayan genel fonksiyon
findItemById - Tür takma adları (type aliases)
Book,Electronic,BookItemveElectronicItem - Envanter dizileri
bookStoreveelectronicStore
Bir InventoryItem<any> alan ve öğenin hangi türde olduğunu belirlemek için tür korumalarını (type guards) kullanan, ardından uygun bilgileri yazdıran getItemDetails adında bir fonksiyon oluşturun.
Fonksiyon şunları yapmalıdır:
InventoryItem<any>türünde biritemparametresi kabul etmeliitem.detailskısmının birtitleözelliğine sahip olup olmadığını kontrol etmek içininoperatörünü kullanmalıitem.detailskısmının birbrandözelliğine sahip olup olmadığını kontrol etmek içininoperatörünü kullanmalı- Eğer bir kitapsa
"Book: [title] by [author]"yazdırmalı - Eğer bir elektronik eşyaysa
"Electronic: [brand] [model]"yazdırmalı - Hiçbiri değilse
"Unknown item type"yazdırmalı - Dönüş türü
voidolmalı
Test öğeleri oluşturun:
- Şu özelliklere sahip
InventoryItem<any>türündetestBookoluşturun:id: 300quantity: 6details: { title: "TypeScript Handbook", author: "Microsoft Team" }
- Şu özelliklere sahip
InventoryItem<any>türündetestElectronicoluşturun:id: 400quantity: 2details: { brand: "Dell", model: "XPS 13" }
- Şu özelliklere sahip
InventoryItem<any>türündeunknownItemoluşturun:id: 500quantity: 1details: { color: "Red", size: "Large" }
Her bir test öğesiyle getItemDetails fonksiyonunu çağırarak fonksiyonunuzu test edin:
getItemDetails(testBook)çağrısını yapıngetItemDetails(testElectronic)çağrısını yapıngetItemDetails(unknownItem)çağrısını yapın
Ayrıca mevcut mağazalarınızdaki öğelerle de test edin:
- expandedBookStore içinde ID'si 100 olan öğeyi bulmak için findItemById kullanın, ardından sonuçla getItemDetails fonksiyonunu çağırın
- electronicStore içinde ID'si 200 olan öğeyi bulmak için findItemById kullanın, ardından sonuçla getItemDetails fonksiyonunu çağırın
Kendin dene
// 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);TypeScript'e Giriş bölümündeki tüm dersler
1TS ile Başlarken
TypeScript Nedir?Neden TypeScript Kullanılır?İlk TypeScript KodunuzDerleme Süreci ve HatalarÖzet: TS'ye Giriş4Fonksiyonlarla Çalışmak
Parametre ve Dönüş Değerlerini TiplendirmeArrow Fonksiyonlarını Tiplendirme'void' Dönüş Tipi'?' ile Opsiyonel ParametrelerVarsayılan Parametre DeğerleriRest Parametrelerini TiplendirmeFonksiyon Tiplerini TanımlamaÖzet: Tiplendirilmiş Fonksiyonlar Oluşturma7Proje: Basit Bir Görev Listesi
Proje: Görev Struct'ını TanımlamaGörev Ekleme Fonksiyonu10Proje: Envanter Yönetimi
Proje: Genel Envanter ÖğesiFonksiyon: Envantere Öğe Ekle2Temel Tipler
Temel Tipler: str, num, boolean'any' Tipi: Kaçış Yolu'unknown' Tipi'null' ve 'undef' ile ÇalışmakTip Çıkarımı İş BaşındaAçık Tip BelirlemeleriÖzet: Temel Tipler Pratiği5Tipler: Takma Adlar, Unionlar ve Kesişimler
İlkel Tipler için Tip Takma AdlarıUnion Tipler ('|')Union Tipler ile ÇalışmakLiteral TiplerKesişim Tipleri ('&')Tip Takma Adlarını BirleştirmeÖzet: Gelişmiş Tip Kombinasyonları3Veri Yapısı: Diziler ve Tuple
Tipli DizilerDiziler için 'readonly' BelirleyicisiTuple Nedir?Tuple Tanımlama ve ErişmeTuple DestructuringReadonly Tuple'larÇok Boyutlu Tipli DizilerDizilerle Spread OperatörüÖzet: Diziler ve Tuple'lar6Nesneleri ve Interface'leri Tiplendirme
Satır İçi Nesne Tipi BelirtimleriNesneler için Type Alias KullanımıInterface'lere GirişInterface'ler ve Type Alias'ların KarşılaştırılmasıOpsiyonel ve Readonly ÖzelliklerInterface ve Tipleri GenişletmeInterface'lere Metot EklemeÖzet: Nesne Yapılarını Tanımlama