Uporaba tipskih parametrov v omejitvah generikov v TypeScript

TypeScript omogoča tudi deklaracijo enega tipskega parametra, ki bo omejen z drugim tipskim parametrom. To je potrebno, ko je treba kopirati lastnosti iz enega objekta v drugega, pri tem pa se zavarovati, da ne posredujemo odvečnih lastnosti.

Oglejmo si naslednji primer. Vrnimo se k funkciji myFunc, ki določa dolžino spremenljivke:

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

Vendar zdaj želimo, da ta funkcija deluje samo s tistimi tipi, ki imajo lastnost length. Za to naredimo vmesnik ILength, ki mu določimo lastnost length številskega tipa:

typescriptinterface ILength {
  length: number;
}

Nato v naši funkciji nastavimo generični tip, ki podeduje od ILength prek ključne besede extends:

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

Tako izgleda naša polna koda:

typescriptinterface ILength {
  length: number;
}

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

Preverimo delovanje naše funkcije in poiščimo dolžino niza:

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

Rezultat izvedene kode:

typescript5
'abcde'

In zdaj posredujmo polje v parameter:

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

Rezultat izvedene kode:

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