keyof ile indexing
- TypeScript kursu
- Orta seviye
- Ders 30/89
- 4 dk
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 | numberGü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
// 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
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?
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ü
interface Kisi { ad: string; yas: number; }
function al(o: Kisi, k: keyof Kisi): Kisi[____] {
return o[k];
}
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 |