TypeScript Academy · Ders

Dize ve Sayı Dizin İmzaları

Sayısal anahtarların kurallarını ve kendine özgü özelliklerini anlayın.

2. ders / 413 adım

Dize ve Sayı Dizin İmzaları, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 2. 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.

İndeks Anahtarlarının İki Türü

TypeScript hem dize hem de sayı indeks imzalarını destekler. Benzer görünseler de JavaScript'in nesne anahtarlarını gerçekte saklama biçimi nedeniyle farklı davranırlar.

Sayı İndeks İmzası

{ [i: number]: T } biçimindeki sayı indeks imzası, sayısal konumla indekslenen nesneleri tanımlar — en doğal kullanım alanları diziler ve dizi benzeri yapılardır.

type NumberList = { [index: number]: string }

const names: NumberList = { 0: "ana", 1: "leo" }
console.log(names[0]) // ana

JS Sayısal Anahtarları Dizelere Dönüştürür

Buradaki temel gerçek şudur: JavaScript nesne anahtarları her zaman dizedir. obj[0] yazdığınızda motor anahtarı aslında "0" dizesi olarak saklar. TypeScript bu gerçeği modeller.

const obj: Record<string, string> = {}
obj[1] = "one"
console.log(obj["1"]) // one — same key!
console.log(Object.keys(obj)) // ["1"]

Uyumluluk Kuralı

Sayısal bir anahtar temel olarak bir dize olduğundan TypeScript şu kuralı uygular: bir nesnede hem sayı hem de dize indeks imzası varsa, sayı indeksinin değer tipi dize indeksinin değer tipine atanabilir olmalıdır.

interface Mixed {
  [key: string]: string
  [index: number]: string // must match the string value type
}
const m: Mixed = { 0: "a", name: "b" }
console.log(m[0], m.name)

Bu Kuralın Var Olma Nedeni

obj[0] ve obj["0"] aynı yuvaysa, değer tipi birinde sayı, diğerinde dize olamaz. Bu nedenle tutarlılığı korumak için sayı indeksinin değer tipi, dize indeksinin değer tipinin alt tipi olmalıdır.

// This is an ERROR:
// interface Bad {
//   [key: string]: string
//   [index: number]: number // number not assignable to string
// }

Sayıyla İndekslenenler: Diziler

Diziler, sayıyla indekslenen tiplerin temel örneğidir. Yerleşik Array<T> tipi etkin olarak bir sayı indeks imzasına sahiptir; bu nedenle arr[i] ifadesi T döndürür.

const nums: number[] = [10, 20, 30]
const first: number = nums[0]
console.log(first + nums[2]) // 40

Demetler de Sayıyla İndekslenir

Demetler sayı indekslemesini temel alır, ancak belirli konumları belirli tiplere sabitler. Aralık dışındaki sayısal erişim, eleman tiplerinin birleşimine geri döner veya hata olarak bildirilir.

const pair: [string, number] = ["age", 30]
const label: string = pair[0]
const value: number = pair[1]
console.log(label + ": " + value)

Dize İndeksi Her İki Arama Türüne de İzin Verir

Dize indeks imzasına sahip bir nesne, sayısal görünümlü erişimleri de kabul eder; çünkü sayı önce bir dize anahtarına dönüştürülür.

type Bag = { [key: string]: number }
const b: Bag = {}
b[5] = 100        // stored as key "5"
console.log(b["5"]) // 100

Sayı İndeksi Dizeleri Kabul Etmez

Tersi doğru değildir. Yalnızca sayı indeks imzasıyla tiplendirilmiş bir nesne, JS teknik olarak buna izin verse bile derleme zamanında dize anahtarlarını reddeder.

type OnlyNumbers = { [i: number]: string }
const o: OnlyNumbers = { 0: "x" }
// o.name = "y" // Error: property name not on number-indexed type
console.log(o[0])

İkisi Arasında Seçim Yapma

Sıra benzeri ve konum tabanlı veriler (listeler, demetler) için sayı indeksi kullanın. Adlandırılmış aramalar (sözlükler, önbellekler) için dize indeksi kullanın. Kararsız kaldığınızda dize daha genel bir seçimdir.

type Positions = { [i: number]: { x: number; y: number } }
type ByName = { [name: string]: { x: number; y: number } }
const p: Positions = { 0: { x: 1, y: 2 } }
console.log(p[0].x)

Uygulamalı Mixed Nesne

Bir değer tipi her iki imzayla da çalışıyorsa iki imzayı birleştirebilirsiniz — adlandırılmış yuvaları da açığa çıkaran seyrek, dizi benzeri kapsayıcılar için kullanışlıdır.

interface Flexible {
  [key: string]: number
  [index: number]: number
}
const f: Flexible = { 0: 1, total: 99 }
console.log(f[0] + f.total) // 100

Hızlı Sınama

Dize ve sayı indeks imzaları arasındaki farkı kavrayışınızı sınayın.

Özet

Dize ve sayı indeks imzaları, JS'nin tüm anahtarları dize olarak saklaması ve sayıları dize anahtarlarına dönüştürmesi nedeniyle farklıdır. İkisi de mevcut olduğunda sayı indeksinin değer tipi, dize indeksinin değer tipine atanabilir olmalıdır. Sayı indekslemesi dizileri ve demetleri, dize indekslemesi ise sözlükleri modeller. Dize indeksli nesneler sayısal erişimi kabul eder, ancak sayı indeksli nesneler dize anahtarlarını derleme zamanında reddeder.

Başlamak ücretsiz

Yapay zeka eğitmeniyle TypeScript öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
101
Dersler
352

Sıkça Sorulan Sorular

“Dize ve Sayı Dizin İmzaları” dersi ücretsiz mi?

Evet — “Dize ve Sayı Dizin İmzaları” 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.

“Dize ve Sayı Dizin İmzaları” dersinde ne öğreneceğim?

Sayısal anahtarların kurallarını ve kendine özgü özelliklerini anlayı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 2. dersidir.

“Dize ve Sayı Dizin İmzaları” 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