TypeScript'te Generics Kısıtlamalarında Tip Parametrelerinin Kullanımı
Ayrıca TypeScript'te, başka bir tip parametresiyle kısıtlanmış bir tip parametresi bildirme imkanı da vardır. Bu, özellikleri bir nesneden başka bir nesneye kopyalarken, fazladan özellik iletmememizi garanti altına almak gerektiğinde gereklidir.
Şu örneği ele alalım. Tekrar, bir değişkenin
uzunluğunu belirleyen myFunc fonksiyonuna
dönelim:
function myFunc <T> (data: T): T {
console.log(data.length); // hata
return data;
}
Ancak şimdi bu fonksiyonun sadece length
özelliği olan tiplerle çalışmasını istiyoruz.
Bunun için ILength arayüzünü oluşturalım
ve ona sayısal tipte bir length özelliği
atalım:
interface ILength {
length: number;
}
Ardından fonksiyonumuzda, extends anahtar
kelimesiyle ILength arayüzünden türeten
generic bir tip tanımlayalım:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
İşte tam kodumuzun görünümü:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Fonksiyonumuzun çalışmasını test edelim ve bir stringin uzunluğunu bulalım:
console.log(myFunc('abcde'));
Kodun çalıştırılma sonucu:
5
'abcde'
Şimdi parametre olarak bir dizi iletelim:
console.log(myFunc(['a', 'b', 'c']));
Kodun çalıştırılma sonucu:
3
[ 'a', 'b', 'c' ]