Típusparaméterek használata generikusok megkötéseiben TypeScript-ben

A TypeScript-ben lehetőség van arra is, hogy egy típusparamétert egy másik típusparaméterrel kötünk meg. Ez akkor szükséges, amikor tulajdonságokat kell másolnunk egy objektumból egy másikba, miközben meg akarunk óvni attól, hogy felesleges tulajdonságokat adunk át.

Nézzük a következő példát. Térjünk vissza a myFunc függvényhez, amely meghatározza egy változó hosszát:

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

Most azonban azt szeretnénk, hogy ez a függvény csak azokkal a típusokkal működjön, amelyeknek van length tulajdonsága. Ehhez készítsünk egy ILength interfészt, és adjunk meg neki egy length numerikus típusú tulajdonságot:

typescriptinterface ILength {
  length: number;
}

Ezután a függvényünkben definiáljunk egy generikus típust, amely a ILength-ből öröklődik a extends kulcsszó segítségével:

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

Így néz ki a teljes kódunk:

typescriptinterface ILength {
  length: number;
}

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

Ellenőrizzük a függvényünk működését és keressük meg egy string hosszát:

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

A kód végrehajtásának eredménye:

typescript5
'abcde'

Most pedig adjunk át egy tömböt paraméterként:

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

A kód végrehajtásának eredménye:

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