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