Általános osztályok a TypeScript-ben

A TypeScript-ben az általános interfészek mellett lehetőség van általános osztályok létrehozására is.

Hozzunk létre egy <User osztályt általános típusparaméterrel. Írjunk egy <value tulajdonságot is általános típusra, és készítsünk egy megfelelő konstruktort:

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

Most készítsünk egy objektumot ebből az osztályból és adjunk meg neki egy sztring értéket a tulajdonságában:

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

Azonban, ha már a létrehozáskor megadtunk az objektumnak egy sztring értéket, nem fogjuk tudni ezt az értéket egy másik típusra módosítani:

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

A kód futtatásakor a következő hibát fogjuk látni:

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

Ugyanakkor módosíthatjuk a sztring értéket:

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

Vegyük észre, hogy ugyanazon objektum tulajdonságát egy másik típusra nem változtathatjuk meg, de létrehozhatunk egy egyszerűen egy másik objektumot:

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