Gegeneraliseerde klassen in TypeScript
Naast gegeneraliseerde interfaces in TypeScript kun je ook gegeneraliseerde klassen maken.
Laten we een klasse User van een gegeneraliseerd
type maken. We schrijven ook een eigenschap value
van een gegeneraliseerd type en maken een bijbehorende
constructor:
class User <T> {
value: T;
constructor(userData: T) {
this.value = userData;
}
}
Laten we nu een object van deze klasse maken en er een stringwaarde in de eigenschap invoeren:
let user = new User('john');
console.log(user.value); // 'john'
Echter, als we het object bij aanroep al een stringwaarde hebben gegeven, kunnen we deze waarde niet overschrijven naar een ander type:
let user = new User('john');
user.value = 35;
Bij een poging de code uit te voeren zien we de volgende fout:
Type 'number' is not assignable to type 'string'.
Maar tegelijkertijd kunnen we de stringwaarde wel overschrijven:
let user = new User('john');
user.value = 'alex';
console.log(user.value); // 'alex'
Merk op dat we de eigenschap van het zelfde object niet naar een ander type kunnen overschrijven, maar we kunnen wel gewoon een ander object aanmaken:
let newUser = new User(35);
console.log(newUser.value); // 35