TypeScript-da generikleriň çäklerinde tip parametrlerini ulanmak

TypeScript-de şeýle hem bir tip parametrini beýleki tip parametr bilen çäklendirip bildirmek mümkinçiligi bar. Bu, bir objektiň aýratynlyklaryny beýleki bir objekte göçürmek gerek bolanda zerur bolýar, şol bir wagtyň özünde goşmaça aýratynlyk geçirmekden hem goranmaly.

Geliň aşakdaky mysala seredeliň. Ýene-de üzüňiň uzynlygyny kesgitleýän myFunc funksiýasyna gaýdalyň:

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

Emma indi biz bu funksiýanyň diňe length aýratynlygy bolan tip bilen işlemegini isleýäris. Bunuň üçin ILength interfeýsini düzeliň, we oňa san tipindäki length aýratynlygyny belleýeliň:

typescriptinterface ILength {
  length: number;
}

Indi öz funksiýamyzda extends açar sözi arkaly ILength-den miras alýan umumy tip belleýeliň:

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

Biziň doly kodymyz şeýle görünýär:

typescriptinterface ILength {
  length: number;
}

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

Geliň funksiýamyzyň işini barlaýalyň we setiriň uzynlygyny tapalyň:

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

Ýerine ýetirilen kodyň netijesi:

typescript5
'abcde'

Indi bolsa parametre massiw geçireliň:

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

Ýerine ýetirilen kodyň netijesi:

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