0Pricing
TypeScript Academy · Ders

Bilinen ve Dinamik Anahtarları Birleştirme

Sabit özellikleri dizin imzalarıyla güvenli biçimde birlikte kullanın.

Bilinen ve Dinamik Anahtarları Birleştirme, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 3. 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.

Sabit ve Esnek Birlikte

Bir nesnede çoğu zaman birkaç garanti edilmiş özellik ile açık uçlu bir ek özellik kümesi birlikte bulunur. TypeScript, önemli bir kısıtlamayla aynı tipte adlandırılmış özellikler ve bir indeks imzası tanımlamanıza izin verir.

Bir İmzanın Yanında Bilinen Bir Anahtar

Burada length her zaman bulunurken diğer tüm dize anahtarları bir sayıya eşlenir. Adlandırılmış özellik ile indeks imzası birlikte var olur.

interface NumberMap {
  length: number
  [key: string]: number
}
const m: NumberMap = { length: 2, a: 1, b: 1 }
console.log(m.length, m.a)

Uyumluluk Kısıtlaması

Buradaki kısıt şudur: her sabit özelliğin tipi, indeks imzasının değer tipine atanabilir olmalıdır. İndeks imzası tüm anahtarlar hakkında bir vaat olduğundan, her adlandırılmış anahtar bu vaade uymalıdır.

interface Valid {
  id: number       // ok: number matches the signature
  [key: string]: number
}
const v: Valid = { id: 1, score: 99 }
console.log(v.id + v.score)

Kısıtlama İhlal Edildiğinde

Sabit bir özelliğin tipi indeks değer tipiyle eşleşmezse TypeScript bunu reddeder. Dize adlandırılmış bir özellik, sayı değerleri içeren bir sözlükte bulunamaz.

// interface Broken {
//   name: string   // Error: string not assignable to number
//   [key: string]: number
// }

İndeks Değer Tipini Genişletme

Farklı sabit özellik tiplerine izin vermek için indeks imzasını hepsini kapsayan bir birleşime genişletin. Artık hem bir dize adı hem de sayısal puanlar bu tipe uyar.

interface Record {
  name: string
  [key: string]: string | number
}
const r: Record = { name: "ana", score: 10 }
console.log(r.name, r.score)

İsteğe Bağlı Sabit Özellikler

Sabit özellikler ? ile isteğe bağlı yapılabilir. Bulunduklarında yine de indeks imzasıyla uyumlu olmaları gerekir.

interface Config {
  id: string
  label?: string
  [key: string]: string | undefined
}
const c: Config = { id: "x" }
console.log(c.label) // undefined

İsteğe Bağlı Özellikler Neden undefined Gerektirir

İsteğe bağlı bir özellik eksik olabileceğinden, etkin tipi undefined değerini içerir. Bu nedenle indeks imzası da undefined değerine izin vermelidir; aksi takdirde TypeScript isteğe bağlı üyeyle ilgili şikâyette bulunur.

interface Safe {
  title?: string
  [key: string]: string | undefined
}
const s: Safe = {}
for (const k in s) console.log(s[k])

Birleşimler Yoluyla Farklı Değer Tipleri

Gerçekçi bir ayar nesnesi: bilinen bir mantıksal bayrak, bilinen bir dize ve keyfi ek değerler. İmzanın birleşimi, tüm sabit özellik tiplerini kapsar.

interface Settings {
  enabled: boolean
  theme: string
  [key: string]: boolean | string
}
const s: Settings = { enabled: true, theme: "dark", lang: "en" }
console.log(s.enabled, s.lang)

Bilinen Anahtarlarla Sayı İndeksi

Kısıtlama sayı indeks imzaları için de geçerlidir. Adlandırılmış bir sayısal özellik, sayı indeksinin değer tipiyle eşleşmelidir.

interface Sparse {
  count: number
  [index: number]: number
}
const sp: Sparse = { count: 1, 0: 100, 1: 200 }
console.log(sp.count, sp[0])

Daha Temiz Bir Alternatif

Sabit keys ile dinamik keys gerçekten ilgisiz tiplere sahipse onları ayırmayı düşünün: dinamik kısmı kendine ait bir özelliğin altına yerleştirin. Böylece kullanışsız bir birleşim kullanmak zorunda kalmazsınız.

interface Better {
  name: string
  scores: { [key: string]: number }
}
const b: Better = { name: "ana", scores: { math: 90 } }
console.log(b.name, b.scores.math)

Ne Zaman Birleştirilmeli

Sabit özellikler ek değerlerin değer tipiyle doğal olarak paylaşılıyorsa bilinen ve dinamik keys'i birleştirin — total içeren sayaçlar veya birkaç garanti edilmiş bayrağa sahip aynı türden ayarlar gibi. Aksi durumda iç içe yerleştirme, tiplerin gerçeğe uygun kalmasını sağlar.

interface Tally {
  total: number
  [bucket: string]: number
}
const t: Tally = { total: 0, a: 3, b: 5 }
t.total = t.a + t.b
console.log(t.total) // 8

Hızlı Sınama

Sabit ve dinamik keys'i birlikte kullanma konusundaki anlayışınızı sınayın.

Özet

Sabit özellikleri ve bir indeks imzasını birlikte tanımlayabilirsiniz, ancak her sabit özelliğin tipi indeks imzasının değer tipine atanabilir olmalıdır. Farklı sabit özellik tiplerini karşılamak için imzayı bir birleşimle genişletin ve sabit özellikler isteğe bağlı olduğunda undefined değerini ekleyin. Tipler gerçekten ilgisiz olduğunda dinamik kısmı bunun yerine kendine ait bir anahtarın altına yerleştirin.

Sıkça Sorulan Sorular

“Bilinen ve Dinamik Anahtarları Birleştirme” dersi ücretsiz mi?

Evet — “Bilinen ve Dinamik Anahtarları Birleştirme” 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.

“Bilinen ve Dinamik Anahtarları Birleştirme” dersinde ne öğreneceğim?

Sabit özellikleri dizin imzalarıyla güvenli biçimde birlikte kullanı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 3. dersidir.

“Bilinen ve Dinamik Anahtarları Birleştirme” 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