Tipisku parametru izmantošana ierobežojumos ģenerikos TypeScript

TypeScript ir arī iespēja deklarēt vienu tipa parametru, kas tiks ierobežots ar citu tipa parametru. Tas ir nepieciešams, kad nākas kopēt īpašības no viena objekta otrā, vienlaikus pasargājoties no tā, ka mēs nepadosim nevajadzīgu īpašību.

Apskatīsim šādu piemēru. Atgriezīsimies pie funkcijas myFunc, kas nosaka mainīgā garumu:

typescriptfunction myFunc <T> (data: T): T {
  console.log(data.length); // kļūda
  return data;
}

Tomēr tagad mēs vēlamies, lai šī funkcija strādātu tikai ar tiem tipiem, kuriem ir īpašība length. Lai to izdarītu, izveidosim interfeisu ILength, kuram piešķirsim īpašību length skaitliskā tipā:

typescriptinterface ILength {
  length: number;
}

Tālāk mūsu funkcijā iestatīsim vispārīgo tipu, kas manto no ILength izmantojot atslēgvārdu extends:

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

Šādi izskatās mūsu pilnais kods:

typescriptinterface ILength {
  length: number;
}

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

Pārbaudīsim mūsu funkcijas darbību un atradīsim virknes garumu:

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

Izpildītā koda rezultāts:

typescript5
'abcde'

Un tagad padodam parametrā masīvu:

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

Izpildītā koda rezultāts:

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