Menu
Coddy logo textTech

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.

challenge icon

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:

  • ProductCatalog tipinde catalog ve string tipinde productName olmak üzere iki parametre alır
  • Verilen ürün adı için stok miktarını döndürür
  • Ürün katalogda mevcut değilse 0 döndürür
  • Açıkça belirtilmiş bir number dönüş tipine sahiptir

Aşağıdaki özelliklere sahip updateStock adında bir fonksiyon oluşturun:

  • ProductCatalog tipinde catalog, string tipinde productName ve number tipinde newQuantity olmak üzere üç parametre alır
  • Verilen ürün için stok miktarını günceller
  • void döndürür

Aşağıdaki özelliklere sahip getTotalStock adında bir fonksiyon oluşturun:

  • ProductCatalog tipinde bir catalog parametresi alır
  • Katalogdaki tüm stok miktarlarının toplamını döndürür
  • Açıkça belirtilmiş bir number dönüş tipine sahiptir

Test verilerini oluşturun:

  • Aşağıdaki ürünleri içeren ProductCatalog tipinde inventory nesnesini oluşturun:
    • "laptop": 15
    • "mouse": 50
    • "keyboard": 25
    • "monitor": 8

Fonksiyonlarınızı test edin ve aşağıdaki çıktıları yazdırın:

  • inventory ve "laptop" ile getStockLevel fonksiyonunu çağırın
  • inventory ve "tablet" ile getStockLevel fonksiyonunu çağırın
  • inventory ile getTotalStock fonksiyonunu çağırın
  • inventory, "mouse" ve 75 ile updateStock fonksiyonunu çağırın
  • inventory, "webcam" ve 12 ile updateStock fonksiyonunu çağırın
  • inventory ve "mouse" ile getStockLevel fonksiyonunu çağırın
  • inventory ve "webcam" ile getStockLevel fonksiyonunu çağırın
  • inventory ile getTotalStock fonksiyonunu ç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));
quiz iconKendini test et

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

Kendi başına pratik yap: Online JavaScript derleyicisi