0Pricing
TypeScript Academy · Ders

Dizin İmzalarını Tanımlama

Anahtarları önceden bilinmeyen nesneleri açıklayın.

Dizin İmzalarını Tanımlama, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.

Bilinmeyen Anahtarlara Sahip Nesneler

Bazen özellik adlarını önceden bilmezsiniz — puanlardan oluşan bir sözlük, bir önbellek veya bir arama tablosu gibi. TypeScript'in indeks imzası, anahtarları keyfi olan ancak değerleri aynı tipte bulunan bir nesneyi tanımlamanızı sağlar.

Temel İndeks İmzası Sözdizimi

İndeks imzası { [key: string]: number } biçiminde yazılır. Bunun anlamı şudur: herhangi bir dize anahtarı bir sayı değerine eşlenir. key adı yalnızca bir label'dır — ona istediğiniz adı verebilirsiniz.

type Scores = { [name: string]: number }

const game: Scores = { alice: 10, bob: 7 }
console.log(game.alice) // 10

Anahtarları Dinamik Olarak Ekleme

Her dize anahtarına izin verildiği için TypeScript şikâyet etmeden çalışma zamanında yepyeni özellikler atayabilirsiniz. İndeks imzasının asıl amacı budur.

type Scores = { [name: string]: number }

const game: Scores = {}
game.charlie = 5     // allowed
game["dave"] = 9     // also allowed
console.log(game.charlie + game.dave) // 14

Keyfi Anahtarlara Erişme

Daha önce hiç ayarlanmamış olanlar da dâhil olmak üzere herhangi bir anahtarı okuyabilirsiniz. Tip sistemi imzaya güvenir; bu nedenle değer tipi number olur — ancak çalışma zamanında missing bir anahtarın değeri undefined olur. Dikkatli olun.

type Scores = { [name: string]: number }

const game: Scores = { alice: 10 }
const missing = game.zara // typed as number, but actually undefined
console.log(missing) // undefined

Tüm Değerler Uyumlu Olmalı

Nesnedeki her özellik, imzanın değer tipiyle eşleşmelidir. Dize değerleri içeren bir sözlüğe sayı değeri ekleyerek tipleri karıştıramazsınız.

type Labels = { [key: string]: string }

const ok: Labels = { id: "a1", role: "admin" }
// const bad: Labels = { id: "a1", count: 5 } // Error: 5 not a string

Arayüzlerde İndeks İmzaları

Aynı sözdizimi bir interface içinde de çalışır. Bu, yapılandırma paketlerini veya bir uygulama programlama arayüzünden gelen yanıt eşlemelerini tanımlamak için yaygın olarak kullanılır.

interface Dictionary {
  [word: string]: string
}

const defs: Dictionary = {
  cat: "a small animal",
  ts: "a typed superset of JavaScript",
}
console.log(defs.ts)

Değer Tipleri Her Türden Olabilir

Değer tarafı ilkel tiplerle sınırlı değildir. Anahtarları dizilere, nesnelere veya birleşimlere eşleyebilirsiniz — verilerinizin gerektirdiği her şeyi kullanabilirsiniz.

type Groups = { [team: string]: string[] }

const roster: Groups = {
  red: ["ana", "leo"],
  blue: ["sam"],
}
console.log(roster.red.length) // 2

İndeks İmzalı Nesneler Üzerinde Yineleme

Bir for...in döngüsü her dinamik anahtarı ziyaret eder. Döngünün içinde değer, imzaya göre doğru şekilde tiplendirilir.

type Scores = { [name: string]: number }
const game: Scores = { alice: 10, bob: 7 }

for (const name in game) {
  console.log(name + ": " + game[name])
}

Tanımsız Değerlerden Kaynaklanan Güvenlik Açığı

İndeks imzaları, aramaların başarısız olabileceği gerçeğini gizler. tsconfig içinde noUncheckedIndexedAccess özelliğini etkinleştirmek, her erişime | undefined ekler ve sizi eksik anahtarları ele almaya zorlar.

// with noUncheckedIndexedAccess on:
type Scores = { [name: string]: number }
const game: Scores = { alice: 10 }
const v = game.bob // type: number | undefined
console.log(v ?? 0)

Salt Okunur İndeks İmzaları

Herhangi bir anahtar üzerinden yazmayı engellemek için imzanın başına readonly ekleyin. Sözlük yalnızca arama yapılabilen bir yapıya dönüşür.

type Frozen = { readonly [key: string]: number }

const rates: Frozen = { usd: 1, eur: 1.1 }
// rates.usd = 2 // Error: read-only
console.log(rates.eur)

İndeks İmzalarının Avantajlı Olduğu Durumlar

Anahtar kümesi açık uçlu olduğunda ve çalışma zamanında keşfedildiğinde indeks imzasını tercih edin: önbellekler, kimliğe göre anahtarlanmış sayaçlar ve ayrıştırılmış sorgu parametreleri gibi. Anahtar kümesi sabit ve biliniyorsa açık özellikleri veya Record tipini tercih edin.

type Counter = { [event: string]: number }
const clicks: Counter = {}
function track(e: string) { clicks[e] = (clicks[e] ?? 0) + 1 }
track("open"); track("open")
console.log(clicks.open) // 2

Hızlı Sınama

İndeks imzaları konusundaki anlayışınızı sınayın.

Özet

{ [key: string]: T } ifadesinin, anahtarları keyfi olan ve değerlerinin tümü T tipini paylaşan nesneleri tanımladığını öğrendiniz. Anahtarlar dinamik olarak eklenebilir, her değer imzaya uygun olmalı ve eksik anahtarlar için yapılan aramalar çalışma zamanında undefined döner. Değiştirilemez eşlemeler için readonly kullanın ve daha güvenli erişim için noUncheckedIndexedAccess özelliğini etkinleştirin.

Sıkça Sorulan Sorular

“Dizin İmzalarını Tanımlama” dersi ücretsiz mi?

Evet — “Dizin İmzalarını Tanımlama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.

“Dizin İmzalarını Tanımlama” dersinde ne öğreneceğim?

Anahtarları önceden bilinmeyen nesneleri açıklayın. TypeScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te TypeScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Dizin İmzalarını Tanımlama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her TypeScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Dizin İmzalarını Tanımlama
  2. Dize ve Sayı Dizin İmzaları
  3. Bilinen ve Dinamik Anahtarları Birleştirme
  4. Dizin İmzaları ve Record
← TypeScript Academy Sayfasına Dön