Употреба типских параметара у ограничењима генерика у TypeScript-у

Такође, у TypeScript-у постоји могућност декларисања једног типског параметра који ће бити ограничен другим типским параметром. Ово је неопходно када треба копирати својства из једног објекта у други, при том осигуравајући се да не проследимо вишак својстава.

Хајде да размотримо следећи пример. Поново се вратимо на функцију myFunc која одређује дужину променљиве:

typescriptfunction myFunc <T> (data: T): T {
  console.log(data.length); // грешка
  return data;
}

Међутим, сада желимо да ова функција ради само са оним типовима који имају својство length. За то ћемо направити интерфејс ILength, којем ћемо задати својство length нумеричког типа:

typescriptinterface ILength {
  length: number;
}

Затим у нашој функцији задајмо генерички тип, који наслеђује од ILength преко кључне речи extends:

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

Ево како изгледа наш потпуни код:

typescriptinterface ILength {
  length: number;
}

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

Хајде да проверимо рад наше функције и пронађемо дужину ниске:

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

Резултат извршеног кода:

typescript5
'abcde'

А сада проследимо низ у параметар:

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

Резултат извршеног кода:

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