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:
function 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ā:
interface ILength {
length: number;
}
Tālāk mūsu funkcijā iestatīsim vispārīgo
tipu, kas manto no ILength
izmantojot atslēgvārdu extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Šādi izskatās mūsu pilnais kods:
interface 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:
console.log(myFunc('abcde'));
Izpildītā koda rezultāts:
5
'abcde'
Un tagad padodam parametrā masīvu:
console.log(myFunc(['a', 'b', 'c']));
Izpildītā koda rezultāts:
3
[ 'a', 'b', 'c' ]