TypeScript-də generiklərin məhdudiyyətlərində tip parametrlərindən istifadə

TypeScript-də həmçinin bir tip parametrinin digər bir tip parametri ilə məhdudlaşdırıla biləcəyi elan edilə bilər. Bu, bir obyektdən xassələri digərinə köçürərkən, əlavə xassə ötürməməyimizə zəmanət etmək lazım olduqda zəruridir.

Gəlin aşağıdakı nümunəyə baxaq. Yenidən dəyişənin uzunluğunu təyin edən myFunc funksiyasına qayıdaq:

typescriptfunction myFunc <T> (data: T): T {
  console.log(data.length); // səhv
  return data;
}

Lakin indi biz istəyirik ki, bu funksiya yalnız length xassəsi olan tiplərlə işləsin. Bunun üçün ILength interfeysi yaradaq və ona length ədəd tipli xassəsi təyin edək:

typescriptinterface ILength {
  length: number;
}

Sonra, funksiyamızda extends açar sözü vasitəsilə ILength-dən miras alan generik tip təyin edək:

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

Tam kodumuz belə görünür:

typescriptinterface ILength {
  length: number;
}

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

Gəlin funksiyamızın işini yoxlayaq və sətrin uzunluğunu tapaq:

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

Yerinə yetirilmiş kodun nəticəsi:

typescript5
'abcde'

İndi isə parametrə massiv ötürək:

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

Yerinə yetirilmiş kodun nəticəsi:

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