Classi generiche in TypeScript

Oltre alle interfacce generiche in TypeScript si possono creare anche classi generiche.

Creiamo una classe User di tipo generico. Scriviamo anche una proprietà value di tipo generico e creiamo il corrispondente costruttore:

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

Ora creiamo un oggetto di questa classe e assegniamogli un valore stringa nella proprietà:

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

Tuttavia, se abbiamo già assegnato all'oggetto un valore stringa alla sua creazione, non possiamo sovrascrivere questo valore con un tipo diverso:

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

Tentando di eseguire il codice vedremo il seguente errore:

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

Ma allo stesso tempo possiamo sovrascrivere il valore stringa:

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

Nota che non possiamo sovrascrivere la proprietà dello stesso oggetto con un tipo diverso, ma possiamo semplicemente creare un altro oggetto:

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