Používanie typových parametrov v obmedzeniach generík v TypeScript

TypeScript tiež umožňuje deklarovanie jedného typového parametra, ktorý bude obmedzený iným typovým parametrom. Toto je potrebné, keď je potrebné kopírovať vlastnosti z jedného objektu do iného, pričom sa chrániť pred tým, že neodovzdáme nadbytočnú vlastnosť.

Pozrime sa na nasledujúci príklad. Znova sa vráťme k funkcii myFunc, ktorá definuje dĺžku premennej:

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

Avšak teraz chceme, aby táto funkcia pracovala len s týmito typmi, ktoré majú vlastnosť length. Na to urobme rozhranie ILength, ktorému nastavme vlastnosť length číselného typu:

typescriptinterface ILength {
  length: number;
}

Ďalej v našej funkcii nastavme generický typ, ktorý dedí od ILength prostredníctvom kľúčového slova extends:

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

Takto vyzerá náš úplný kód:

typescriptinterface ILength {
  length: number;
}

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

Skontrolujme činnosť našej funkcie a nájdime dĺžku reťazca:

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

Výsledok vykonaného kódu:

typescript5
'abcde'

A teraz odovzdajme do parametra pole:

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

Výsledok vykonaného kódu:

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