extends kısıtı
- TypeScript kursu
- Orta seviye
- Ders 20/89
- 4 dk
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
// 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
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?
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
interface Adli { ad: string; }
function selamla<T ____ Adli>(x: T): string {
return "Merhaba " + x.ad;
}
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ı |