keyof kısıtı
- TypeScript kursu
- Orta seviye
- Ders 21/89
- 4 dk
keyof ile özellik adı kısıtı öğrenirsin.
keyof kısıtı
keyof T, T türünün tüm özellik adlarını birleşim türü olarak verir. K extends keyof T yazarak K'nın yalnızca T'nin geçerli bir özellik adı olmasını sağlarsın. Böylece al(obje, "ad") çağrısı güvenli olur; var olmayan bir özellik adı derleme hatasıdır.
function al<T, K extends keyof T>(o: T, k: K): T[K] {
return o[k];
}
const u = { ad: "Ayşe", yas: 30 };
console.log(al(u, "ad")); // AyşeT[K] dizin türü
T[K], T'nin K özelliğinin değer türünü verir. al<T, K extends keyof T>(o: T, k: K): T[K] imzası, döndürülen değerin tam olarak o özelliğin türü olmasını sağlar. Böylece al(u, "yas") çağrısı number dönerken al(u, "ad") çağrısı string döner; her ikisi de derleme zamanında bilinir.
Uygulama Özellik getir
al<T, K extends keyof T>(o: T, k: K): T[K] generic fonksiyonunu yaz; gövdesi return o[k]; olsun. { ad: "Ece", yas: 25 } nesnesini kisi değişkenine ata. al(kisi, "ad") ve al(kisi, "yas") sonuçlarını ayrı satırlarda yazdır.
Başlangıç kodu
// al fonksiyonunu iki tür parametreli generic olarak yaz
// K parametresini T'nin özellik adlarıyla sınırla
// dönüş türü T'nin K özelliği olsun
// gövde return o[k]; olsun
// kisi değişkenine { ad: "Ece", yas: 25 } ata
// kisi'den "ad" ve "yas" özelliklerini ayrı satırlarda yazdırÖrnek çözüm
function al<T, K extends keyof T>(o: T, k: K): T[K] {
return o[k];
}
const kisi = { ad: "Ece", yas: 25 };
console.log(al(kisi, "ad"));
console.log(al(kisi, "yas"));Beklenen çıktı
Ece 25
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 K extends keyof T kısıtı neyi garanti eder?
function al<T, K extends keyof T>(o: T, k: K): T[K]- K'nın number olduğunu
- T'nin bir dizi olduğunu
- T'nin K özelliğe sahip olduğunu
- K'nın T'nin geçerli bir özellik adı olduğunu Doğru cevap
Açıklama: keyof T, T'nin tüm özellik adlarını verir; K extends keyof T ise K'nın bu adlardan biri olduğunu garanti eder. T'nin yapısıyla değil K'nın adıyla ilgilidir.
2 keyof ile K'yı sınırla
function al<T, K extends ____>(o: T, k: K): T[K] {
return o[k];
}
function al<T, K extends keyof T>(o: T, k: K): T[K] {
return o[k];
}
Açıklama: K'nın T'nin özellik adlarından biri olması için keyof T kullanılır. Yalnızca T herhangi bir sınır koymaz; string tüm string'leri kabul eder; keyof K ters yön mantıksızdır.
3 keyof kısıtı parçaları
| Kavram | Anlamı |
|---|---|
keyof T |
T'nin özellik adları birleşimi |
K extends keyof T |
K'yı özellik adıyla sınırlar |
T[K] |
K özelliğinin değer türü |
al(u, "ad") |
Geçerli özellik adıyla çağrı |