Bruk av typeparametere i begrensninger for generiske typer i TypeScript

TypeScript har også mulighet til deklarasjon av en typeparameter som vil være begrenset av en annen typeparameter. Dette er nødvendig når man må kopiere egenskaper fra ett objekt til et annet, samtidig som man forsikrer seg om at vi ikke overfører unødvendige egenskaper.

La oss se på følgende eksempel. Vi går tilbake til funksjonen myFunc, som bestemmer lengden på en variabel:

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

Men nå ønsker vi at denne funksjonen skal fungere bare med de typene som har egenskapen length. For å gjøre dette, lager vi et grensesnitt ILength, og tilordner det egenskapen length av numerisk type:

typescriptinterface ILength {
  length: number;
}

Deretter setter vi i vår funksjon en generisk type, som arver fra ILength via nøkkelordet extends:

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

Slik ser vår fulle kode ut:

typescriptinterface ILength {
  length: number;
}

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

La oss teste funksjonen vår og finne lengden på en streng:

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

Resultatet av den utførte koden:

typescript5
'abcde'

La oss nå sende inn en array som parameter:

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

Resultatet av den utførte koden:

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