CodeBlanks Logo Icon CodeBlanks

extends kısıtı

extends ile tür parametresine sınır koymayı öğrenirsin.

extends kısıtı

extends ile tür parametresine sınır koyarsın. T extends Kisisel, T'nin en az Kisisel'in tüm üyelerine sahip olması gerektiğini söyler. Böylece gövdede T üzerinden .ad gibi bilinen özelliklere erişebilirsin; bilinmeyen bir özelliğe erişim derleme hatasıdır.

interface Kisisel {
  ad: string;
}
function yaz<T extends Kisisel>(x: T): void {
  console.log(x.ad);  // güvenli
}

Kısıt ile kullanım alanı

Kısıt olmadan T üzerinde yalnızca her türde ortak olan şeyler (ör. atama) yapılabilir; .ad veya .uzunluk gibi özel erişim derleme hatasıdır. Kısıt eklemek, generic fonksiyonun gövdesinde belirli özellikleri güvenle kullanmaya izin verir; tür güvenliği bozulmadan kod yeniden kullanımı artar.

Uygulama Uzunluğu yazdır

Uzunluklu arayüzünü { uzunluk: number } olarak tanımla. uzunlukYaz<T extends Uzunluklu>(x: T): void fonksiyonu yazsın ve console.log(x.uzunluk) ile uzunluğu yazdırsın. Sonra uzunlukYaz({ uzunluk: 7 }) çağrısıyla nesnenin uzunluğunu yazdır.

Başlangıç kodu

index.ts
// Uzunluklu arayüzünü tanımla
// tek özellik: uzunluk, türü number
// uzunlukYaz fonksiyonunu generic olarak yaz
// T parametresine Uzunluklu kısıtı ekle
// console.log ile x'in uzunluk özelliğini yazdır
// { uzunluk: 7 } nesnesiyle fonksiyonu çağır

Örnek çözüm

index.ts
interface Uzunluklu {
  uzunluk: number;
}
function uzunlukYaz<T extends Uzunluklu>(x: T): void {
  console.log(x.uzunluk);
}
uzunlukYaz({ uzunluk: 7 });

Beklenen çıktı

7

Soru ve cevaplar

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

1 Aşağıdaki fonksiyon gövdesinde neden x.uzunluk'ya erişilebiliyor?

index.ts
interface Uzunluklu { uzunluk: number; }
function isle<T extends Uzunluklu>(x: T) {
  return x.uzunluk;
}
  • T, Uzunluklu türüne extends ile bağlıdır Doğru cevap
  • T her zaman string olur
  • any kullanıldığı için
  • T herhangi bir tür olabilir

Açıklama: T extends Uzunluklu sayesinde derleyici T'nin uzunluk özelliğine sahip olduğunu bilir. Bu olmasaydı erişim derleme hatası verirdi.

2 Kısıt ekle

Soru
interface Adli { ad: string; }
function selamla<T ____ Adli>(x: T): string {
  return "Merhaba " + x.ad;
}
Cevap
interface Adli { ad: string; }
function selamla<T extends Adli>(x: T): string {
  return "Merhaba " + x.ad;
}

Açıklama: Tür parametresine sınır koymak için extends kullanılır. implements sınıflar içindir; instanceof değer kontrolüdür; is TypeScript'te anahtar kelime değildir.

3 extends kısıtı parçaları

Kavram Anlamı
interface Adli Kısıt türü bildirimi
T extends Adli Tür parametresine sınır
x.ad Kısıt sayesinde güvenli erişim
yaz<Calisan>(...) Kısıtı sağlayan türle çağrı

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