Vispārinātie klases TypeScript

Papildus vispārinātajiem interfeisiem TypeScript var izveidot arī vispārinātas klases.

Izveidosim klasi User vispārinātā tipā. Uzrakstīsim arī īpašību value vispārinātā tipa un izveidosim atbilstošo konstruktoru:

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

Tagad izveidosim šīs klases objektu un ierakstīsim tam īpašībā virknes vērtību:

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

Tomēr, ja mēs jau esam iestatījuši objektam pie tā izsaukšanas virknes vērtību, mums neizdosies pārrakstīt šo vērtību citā tipā:

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

Mēģinot palaist kodu, mēs redzēsim šādu kļūdu:

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

Bet tajā pašā laikā mēs varam pārrakstīt virknes vērtību:

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

Ievērojiet, ka pārrakstīt īpašību no tā paša objekta citā tipā mēs nevaram, bet varam izveidot vienkārši citu objektu:

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