Nesneler için İndeks İmzaları
Coddy'nin JavaScript Journey'sinin TypeScript'e Giriş bölümünün bir parçası. Ders 72 / 73.
Bazen, içerecekleri değerlerin türünü bildiğiniz ancak belirli özellik adlarını önceden bilmediğiniz nesnelerle çalışmanız gerekir. Bu durum, anahtarların dinamik olduğu sözlükler (dictionaries), haritalar (maps) veya yapılandırma nesneleriyle çalışırken yaygındır.
Dizin imzaları, bu tür nesneler için tür yapısını tanımlamanıza olanak tanır. Sözdizimi, anahtar türünü ve değer türünü belirtmek için köşeli parantezler kullanır:
interface StringDictionary {
[key: string]: number;
}Bu arayüz, "herhangi bir string anahtarın sayısal bir değeri olacaktır" der. Ardından bu desene uyan nesneler oluşturabilirsiniz:
let scores: StringDictionary = {
"alice": 95,
"bob": 87,
"charlie": 92
};Dizin imzaları (Index signatures), kullanıcı tercihlerini saklamak, dinamik anahtarlarla verileri önbelleğe almak veya özellik adlarının derleme zamanında bilinmediği API yanıtlarıyla çalışmak gibi senaryolar için özellikle yararlıdır. Anahtar türü genellikle string veya number iken, değer türü herhangi bir geçerli TypeScript türü olabilir.
Görev
KolayÜrün kategorilerinin ve stok miktarlarının dinamik olarak saklandığı bir ürün kataloğu sistemi için bir arayüz (interface) oluşturun.
Dize anahtarlarını (ürün adları) sayı değerlerine (stok miktarları) eşlemek için bir dizin imzası (index signature) kullanan ProductCatalog adında bir arayüz oluşturun.
Aşağıdaki özelliklere sahip getStockLevel adında bir fonksiyon oluşturun:
ProductCatalogtipindecatalogvestringtipindeproductNameolmak üzere iki parametre alır- Verilen ürün adı için stok miktarını döndürür
- Ürün katalogda mevcut değilse
0döndürür - Açıkça belirtilmiş bir
numberdönüş tipine sahiptir
Aşağıdaki özelliklere sahip updateStock adında bir fonksiyon oluşturun:
ProductCatalogtipindecatalog,stringtipindeproductNamevenumbertipindenewQuantityolmak üzere üç parametre alır- Verilen ürün için stok miktarını günceller
voiddöndürür
Aşağıdaki özelliklere sahip getTotalStock adında bir fonksiyon oluşturun:
ProductCatalogtipinde bircatalogparametresi alır- Katalogdaki tüm stok miktarlarının toplamını döndürür
- Açıkça belirtilmiş bir
numberdönüş tipine sahiptir
Test verilerini oluşturun:
- Aşağıdaki ürünleri içeren
ProductCatalogtipindeinventorynesnesini oluşturun:"laptop":15"mouse":50"keyboard":25"monitor":8
Fonksiyonlarınızı test edin ve aşağıdaki çıktıları yazdırın:
inventoryve"laptop"ilegetStockLevelfonksiyonunu çağırıninventoryve"tablet"ilegetStockLevelfonksiyonunu çağırıninventoryilegetTotalStockfonksiyonunu çağırıninventory,"mouse"ve75ileupdateStockfonksiyonunu çağırıninventory,"webcam"ve12ileupdateStockfonksiyonunu çağırıninventoryve"mouse"ilegetStockLevelfonksiyonunu çağırıninventoryve"webcam"ilegetStockLevelfonksiyonunu çağırıninventoryilegetTotalStockfonksiyonunu çağırın
Kendin dene
// TODO: Kodunuzu buraya yazın
// ProductCatalog arayüzünü oluşturun
// getStockLevel fonksiyonunu oluşturun
// updateStock fonksiyonunu oluşturun
// getTotalStock fonksiyonunu oluşturun
// Test verilerini oluşturun - inventory nesnesi
// Fonksiyonları test edin ve sonuçları yazdırın
console.log(getStockLevel(inventory, "laptop"));
console.log(getStockLevel(inventory, "tablet"));
console.log(getTotalStock(inventory));
updateStock(inventory, "mouse", 75);
updateStock(inventory, "webcam", 12);
console.log(getStockLevel(inventory, "mouse"));
console.log(getStockLevel(inventory, "webcam"));
console.log(getTotalStock(inventory));Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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şturma2Temel 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ı8Enumlar
Sayısal Enum Nedir?Sayısal Enum KullanımıString Enum Nedir?String Enum KullanımıHeterojen EnumlarÖzet: Enum Kullanımı11İleri Düzey Konular
Tür AtamalarıTür Korumaları: in & instanceof'never' TürüNullable Türler ('strictNull')Nesneler için İndeks İmzalarıÖzet: Türlerde İnce Ayar Yapma3Veri 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ımlamaKendi başına pratik yap: Online JavaScript derleyicisi