CodeBlanks Logo Icon CodeBlanks

Özet - Generic kısıtları

Kısıtlı generic'lerle bir özellik seçici yazarsın.

Özet - Generic kısıtları

Generic kısıtları, tür parametresinin yapabileceklerini sınırlar. T extends Adli belirli özellikleri zorunlu kılar; K extends keyof T özellik adını güvenli yapar; <T = string> tür parametresine varsayılan verir. Üçünü birleştirerek tür güvenli özellik seçiciler ve yardımcılar yazabilirsin.

function sec<T, K extends keyof T>(o: T, k: K): T[K] {
  return o[k];
}

Uygulama Tür güvenli özellik seçici

sec<T, K extends keyof T>(o: T, k: K): T[K] generic fonksiyonunu yaz; gövdesi return o[k]; olsun. { kullanici: "ali", puan: 90 } nesnesini kayit değişkenine ata. sec(kayit, "kullanici") ve sec(kayit, "puan") sonuçlarını ayrı satırlarda yazdır.

Başlangıç kodu

index.ts
// sec 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
// kayit değişkenine { kullanici: "ali", puan: 90 } ata
// kayit'tan "kullanici" ve "puan" özelliklerini ayrı satırlarda yazdır

Örnek çözüm

index.ts
function sec<T, K extends keyof T>(o: T, k: K): T[K] {
  return o[k];
}
const kayit = { kullanici: "ali", puan: 90 };
console.log(sec(kayit, "kullanici"));
console.log(sec(kayit, "puan"));

Beklenen çıktı

ali
90

Soru ve cevaplar

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

1 Bir generic fonksiyonun gövdesinde x.uzunluk'a erişmek istiyorsun. Hangi kısıt gerekir?

  • T extends Uzunluklu, Uzunluklu = { uzunluk: number } Doğru cevap
  • K extends keyof T
  • T = string
  • Hiçbiri; kısıt gerekmez

Açıklama: Bir özelliğe erişmek için türün o özelliğe sahip olması gerekir; bunu extends ile bildirirsin. keyof özellik adını sınırlar, default ise yalnızca varsayılan tür verir; ikisi de erişim izni vermez.

2 Özellik seçici imzası

Soru
function sec<T, K extends ____>(o: T, k: K): T[K] {
  return o[k];
}
Cevap
function sec<T, K extends keyof T>(o: T, k: K): T[K] {
  return o[k];
}

Açıklama: K'nın T'nin özellik adı olması için keyof T kullanılır. Yalnızca T sınır koymaz; string her adı kabul eder; keyof K yanlış yöndedir.

3 Kısıt türlerini eşleştir

Kavram Anlamı
T extends Adli Belirli özellik zorunlu
K extends keyof T Özellik adını sınırlar
<T = string> Varsayılan tür verir
T[K] K özelliğinin değer türü

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