Generische Klassen in TypeScript

Neben generischen Schnittstellen in TypeScript kann man auch generische Klassen erstellen.

Lassen Sie uns eine Klasse User eines generischen Typs erstellen. Schreiben wir außerdem eine Eigenschaft value des generischen Typs und erstellen wir den entsprechenden Konstruktor:

typescriptclass User <T> {
  value: T;
  constructor(userData: T) {
    this.value = userData;
  }
}

Erstellen wir nun ein Objekt dieser Klasse und weisen wir ihm einen Zeichenkettenwert als Eigenschaft zu:

typescriptlet user = new User('john');
console.log(user.value); // 'john'

Wenn wir dem Objekt bei seinem Aufruf jedoch bereits einen Zeichenkettenwert zugewiesen haben, können wir diesen Wert nicht in einen anderen Typ umschreiben:

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

Beim Versuch, den Code auszuführen, werden wir den folgenden Fehler sehen:

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

Gleichzeitig können wir den Zeichenkettenwert aber überschreiben:

typescriptlet user = new User('john');
user.value = 'alex';
console.log(user.value); // 'alex'

Beachten Sie, dass wir die Eigenschaft desselben Objekts nicht in einen anderen Typ umwandeln können, aber wir können einfach ein anderes Objekt erstellen:

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