CodeBlanks Logo Icon CodeBlanks

keyof ile indexing

keyof ile güvenli özellik erişimini öğrenirsin.

keyof ile indexing

keyof ile elde edilen tür, köşeli parantez içinde dizin erişimi için kullanılabilir. Kisi[keyof Kisi], Kisi'nin tüm özellik değer türlerinin birleşimini verir. Bu, bir nesneden güvenli özellik erişimi sağlar; yanlış anahtar derleme hatasıdır.

interface Kisi {
  ad: string;
  yas: number;
}
type DegerTuru = Kisi[keyof Kisi];
// string | number

Güvenli özellik erişimi

Bir fonksiyon k: keyof Kisi parametresi alırsa, gövdede o[k] erişimi tür güvenlidir. Çünkü derleyici k'nın geçerli bir özellik adı olduğunu bilir. Dönüş türü Kisi[keyof Kisi] olursa tüm olası değer türlerinin birleşimi döner.

Uygulama Anahtarla değer getir

Kisi arayüzünü ad: string ve yas: number ile tanımla. al(o: Kisi, k: keyof Kisi): Kisi[keyof Kisi] fonksiyonunu yaz; gövdesi return o[k]; olsun. kisi değişkenine { ad: "Ela", yas: 28 } ata. al(kisi, "ad") sonucunu console.log ile yazdır.

Başlangıç kodu

index.ts
// Kisi arayüzünü ad ve yas ile tanımla
// al fonksiyonu yaz: o Kisi, k Kisi'nin özellik adlarından biri
// dönüş türü tüm değer türlerinin birleşimi olsun
// gövde return o[k]; olsun
// kisi değişkenine { ad: "Ela", yas: 28 } ata
// kisi'den ad değerini al fonksiyonuyla getir ve yazdır

Örnek çözüm

index.ts
interface Kisi {
  ad: string;
  yas: number;
}
function al(o: Kisi, k: keyof Kisi): Kisi[keyof Kisi] {
  return o[k];
}
const kisi = { ad: "Ela", yas: 28 };
console.log(al(kisi, "ad"));

Beklenen çıktı

Ela

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Aşağıdaki kodda T ne olur?

index.ts
interface Kisi { ad: string; yas: number; }
type T = Kisi[keyof Kisi];
  • "ad" | "yas"
  • Kisi
  • any
  • string | number Doğru cevap

Açıklama: Kisi[keyof Kisi], tüm özellik değer türlerinin birleşimini verir. Kisi'nin özellikleri string ve number olduğundan sonuç string | number olur. Anahtar adlarını vermez.

2 Dizin erişim türü

Soru
interface Kisi { ad: string; yas: number; }
function al(o: Kisi, k: keyof Kisi): Kisi[____] {
  return o[k];
}
Cevap
interface Kisi { ad: string; yas: number; }
function al(o: Kisi, k: keyof Kisi): Kisi[keyof Kisi] {
  return o[k];
}

Açıklama: Tüm değer türlerini almak için köşeli paranteze keyof Kisi yazılır. string yalnızca bir türdür; Kisi yanlış tür; ad ise tek bir özellik adıdır.

3 keyof indexing parçaları

Kavram Anlamı
keyof Kisi Kisi'nin özellik adları
Kisi[keyof Kisi] Tüm değer türlerinin birleşimi
o[k] Güvenli özellik erişimi
al(kisi, "ad") Anahtarla değer getirme

Orta seviye bölümündeki tüm dersler