Ö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.
Görev
KolayÖnceki meydan okumadan size aşağıdakiler sağlanmıştır:
id,quantityvedetailsözelliklerine sahip genel (generic) arayüzInventoryItem<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
Booktür takma adı oluşturun:stringtüründetitlestringtüründeauthor
- Şu özelliklere sahip bir
Electronictür takma adı oluşturun:stringtüründebrandstringtüründemodel
Özel envanter öğeleri için tür takma adları oluşturun:
InventoryItem<Book>olarakBookItemoluşturunInventoryItem<Electronic>olarakElectronicItemoluşturun
Yeni tür takma adlarınızı kullanarak somut envanter öğeleri oluşturun:
- Şu özelliklere sahip
BookItemtüründespecificBookoluşturun:id: 100quantity: 8details: { title: "Clean Code", author: "Robert Martin" }
- Şu özelliklere sahip
ElectronicItemtüründespecificElectronicoluşturun:id: 200quantity: 4details: { brand: "Sony", model: "WH-1000XM4" }
Türlendirilmiş envanter dizileri oluşturun:
specificBooköğesini içerenBookItem[]türündebookStoreoluşturunspecificElectronicöğesini içerenElectronicItem[]türündeelectronicStoreoluşturun
Ek öğeler oluşturun ve tür sisteminizi test edin:
- Şu özelliklere sahip
BookItemtüründeanotherBookoluşturun:id: 101quantity: 3details: { title: "Design Patterns", author: "Gang of Four" }
anotherBooköğesinibookStoredizisine eklemek içinaddItemkullanın ve sonucuexpandedBookStoreiçinde saklayın
Aşağıdaki çıktıları yazdırın:
specificBook.details.titledeğerini yazdırınspecificBook.details.authordeğerini yazdırınspecificElectronic.details.branddeğerini yazdırınspecificElectronic.details.modeldeğerini yazdırınexpandedBookStoredizisinin uzunluğunu yazdırınexpandedBookStoreiçinde ID'si 101 olan öğeyi bulmak içinfindItemByIdkullanın ve sonucundetails.titledeğerini yazdırınelectronicStoreiçinde ID'si 200 olan öğeyi bulmak içinfindItemByIdkullanın ve sonucunquantitydeğerini yazdırınexpandedBookStore[1].details.authordeğ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
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