Tipinių parametrų naudojimas generikų apribojimuose TypeScript

TypeScript taip pat suteikia galimybę apibrėžti vieną tipinį parametrą, kuris bus apribotas kitu tipiniu parametru. Tai būtina, kai reikia nukopijuoti savybes iš vieno objekto į kita, tuo pačiu apsisaugant nuo perteklinių savybių perdavimo.

Pažvelkime į tokį pavyzdį. Vėl grįžkime prie funkcijos myFunc, apibrėžiančios kintamojo ilgį:

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

Tačiau dabar norime, kad ši funkcija veiktų tik su tais tipais, kurie turi savybę length. Tam sukursime interfeisą ILength, kuriam priskirsime savybę length skaitinio tipo:

typescriptinterface ILength {
  length: number;
}

Tada mūsų funkcijoje nustatysime bendrinį tipą, kuris paveldi iš ILength naudojant raktinį žodį extends:

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

Štai kaip atrodo mūsų visas kodas:

typescriptinterface ILength {
  length: number;
}

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

Patikrinkime mūsų funkcijos veikimą ir rasime eilutės ilgį:

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

Vykdymo rezultatas:

typescript5
'abcde'

O dabar perduokime parametrą masyvą:

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

Vykdymo rezultatas:

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