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:

typescriptclass 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:

typescriptlet 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:

typescriptlet user = new User('john');
user.value = 35;

Bij een poging de code uit te voeren zien we de volgende fout:

typescriptType 'number' is not assignable to type 'string'.

Maar tegelijkertijd kunnen we de stringwaarde wel overschrijven:

typescriptlet 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:

typescriptlet newUser = new User(35);
console.log(newUser.value); // 35