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:

typescriptfunction 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:

typescriptinterface ILength {
  length: number;
}

Ardından fonksiyonumuzda, extends anahtar kelimesiyle ILength arayüzünden türeten generic bir tip tanımlayalım:

typescriptfunction myFunc <T extends ILength> (data: T): T {
  console.log(data.length);
  return data;
}

İşte tam kodumuzun görünümü:

typescriptinterface 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:

typescriptconsole.log(myFunc('abcde'));

Kodun çalıştırılma sonucu:

typescript5
'abcde'

Şimdi parametre olarak bir dizi iletelim:

typescriptconsole.log(myFunc(['a', 'b', 'c']));

Kodun çalıştırılma sonucu:

typescript3
[ 'a', 'b', 'c' ]