Класҳои умумии дар TypeScript

Ғайр аз интерфейсҳои умумӣ дар TypeScript метавон классҳои умумиро низ сохт.

Биёед як класи User аз навъи умумӣ созем. Хосияти value-ро аз навъи умумӣ нависем ва конструктори мувофиқ созем:

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

Ҳоло як объекти ин класс созем ва ба хосияти он қимати сатрӣ гузорем:

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

Аммо, агар мо ба объект ҳангоми даъваташон қимати сатрӣ дода бошем, ба мо имкон нахоҳад буд, ки ин қиматро ба навъи дигар аз нав нависем:

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

Ҳангоми кӯшиши оғози рамз, мо хатои зеринро мебинем:

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

Вале дар ҳамон вақт мо метавонем қимати сатрӣ аз нав нависем:

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

Диққат диҳед, ки аз нав навиштани хосияти ҳамон объект ба навъи дигар ба мо имконнопазир аст, вале мо метавонем танҳо объекти дигаре созем:

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