Dizin İmzaları ve Record
Dizin imzaları ile Record yardımcı türü arasında seçim yapın.
Dizin İmzaları ve Record, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 4. 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.
Bir Eşlemeyi Tiplemenin İki Yolu
TypeScript bir sözlüğü tanımlamak için iki yaygın yol sunar: { [k: string]: V } gibi bir indeks imzası ve yerleşik yardımcı tip Record<K, V>. Büyük ölçüde aynı şeyleri ifade etseler de farklı okunurlar.
Record Yardımcı Tipi
Record<K, V>, anahtarları K ve değerleri V olan bir nesne tipi oluşturur. Anahtar olarak string kullanıldığında bir dize indeks imzasına eşdeğerdir.
type Scores = Record<string, number>
const game: Scores = { alice: 10, bob: 7 }
console.log(game.alice)İndeks İmzasına Eşdeğer
Bu iki tip aynı yapıyı tanımlar. Record<string, number> ve { [key: string]: number }, keyfi dize keys için birbirinin yerine kullanılabilir.
type A = Record<string, number>
type B = { [key: string]: number }
const a: A = { x: 1 }
const b: B = a // assignable both ways
console.log(b.x)Değişmez Anahtar Birleşimiyle Record
Record tipinin asıl gücü, sonlu bir değişmez anahtar birleşimiyle ortaya çıkar. Listelenen her anahtarın zorunlu olduğu bir nesne oluşturur — indeks imzasının ifade edemediği bir şeydir.
type Role = "admin" | "editor" | "viewer"
type Perms = Record<Role, boolean>
const p: Perms = { admin: true, editor: true, viewer: false }
console.log(p.admin)Eksik Anahtarlar Yakalanır
Her değişmez anahtar zorunlu olduğundan birini unutmanız derleme hatasına yol açar. Bu, indeks imzalarının sağlayamayacağı güçlü bir güvencedir.
type Role = "admin" | "editor" | "viewer"
// const bad: Record<Role, boolean> = { admin: true, editor: true }
// Error: property viewer is missingİndeks İmzası Her Anahtara İzin Verir
Buna karşılık indeks imzası açık uçludur. Hiçbir yerde adı geçmemiş keys ekleyebilirsiniz ve hiçbir anahtarın mevcut olması zorunlu değildir.
type Open = { [key: string]: number }
const o: Open = {} // no keys required
o.anything = 1 // any key allowed
console.log(o.anything)Sonlu Anahtar Kümeleri: Record'ı Tercih Edin
Anahtarlar bilinen ve sonlu bir kümeyse değişmez birleşimli Record daha açık ve güvenlidir. Hangi anahtarların bulunduğunu tam olarak belgeler ve eksiksizliği zorunlu kılar.
type Direction = "north" | "south" | "east" | "west"
type Moves = Record<Direction, number>
const m: Moves = { north: 1, south: 0, east: 2, west: 0 }
console.log(m.east)Açık Uçlu Anahtar Kümeleri: İkisi de Çalışır
Anahtarlar sınırsız olduğunda ve çalışma zamanında keşfedildiğinde hem Record<string, V> hem de indeks imzası çalışır. Ekiplerin çoğu kısalık için Record'ı, diğerleri ise açıkça belirtilmesi için imzayı seçer.
type Cache1 = Record<string, string>
type Cache2 = { [url: string]: string }
const c: Cache1 = {}
c["/home"] = "<html>"
console.log(c["/home"])Record Yalnızca Eşlenmiş Bir Tiptir
Arka planda Record<K, V> eşlenmiş bir tip olarak tanımlanır: { [P in K]: V }. Bunu bilmek, değişmez bir birleşimin neden zorunlu anahtarlar ürettiğini, string tipinin ise neden bir indeks imzası oluşturduğunu açıklar.
// lib definition (simplified):
// type Record<K extends string | number | symbol, V> = { [P in K]: V }
type Flags = Record<"a" | "b", boolean>
const f: Flags = { a: true, b: false }
console.log(f.a)Adlandırılmış Anahtarlar ve Tümünü Kapsayan Kısım
Bir indeks imzası, tek bir arayüzde sabit keys ile tümünü kapsayan bir kısmı birleştirebilir — her ikisine de ihtiyaç duyduğunuzda kullanışlıdır. Yalnızca Record, zorunlu adlandırılmış anahtarları açık uçlu tümünü kapsayan kısımla bu kadar temiz bir şekilde birleştiremez.
interface Response {
status: number
[header: string]: number | string
}
const r: Response = { status: 200, "x-id": "abc" }
console.log(r.status)Uygulamada Seçim Yapma
Pratik kural: sonlu ve bilinen anahtarlar → eksiksizlik denetimi için Record<Union, V>. Sınırsız anahtarlar → iki biçimden biri. Adlandırılmış anahtarlarla tümünü kapsayan bir kısma ihtiyaç varsa → bir arayüz içinde indeks imzası.
type Status = "ok" | "error"
type Messages = Record<Status, string>
const msg: Messages = { ok: "done", error: "failed" }
console.log(msg.ok)Hızlı Sınama
Record ile indeks imzaları arasındaki fark konusundaki anlayışınızı sınayın.
Özet
Record<string, V> bir dize indeks imzasına eşittir, ancak değişmez bir anahtar birleşimiyle kullanılan Record, listelenen her anahtarı zorunlu kılar ve eksiklikleri derleme zamanında yakalar. Sonlu ve bilinen anahtarlar için Record<Union, V> kullanın; sınırsız anahtarlar için iki biçimden birini, adlandırılmış anahtarlarla tümünü kapsayan bir kısma ihtiyaç duyduğunuzda ise indeks imzasını kullanın. Arka planda Record, { [P in K]: V } eşlenmiş tipidir.
Sıkça Sorulan Sorular
“Dizin İmzaları ve Record” dersi ücretsiz mi?
Evet — “Dizin İmzaları ve Record” 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ı ve Record” dersinde ne öğreneceğim?
Dizin imzaları ile Record yardımcı türü arasında seçim yapı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 4. dersidir.
“Dizin İmzaları ve Record” 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
- Dizin İmzalarını Tanımlama
- Dize ve Sayı Dizin İmzaları
- Bilinen ve Dinamik Anahtarları Birleştirme
- Dizin İmzaları ve Record