TypeScript-ի ընդհանրացված դասեր
TypeScript-ում, բացի ընդհանրացված ինտերֆեյսներից, կարելի է ստեղծել նաև ընդհանրացված դասեր:
Եկեք ստեղծենք User ընդհանրացված
տիպի դաս: Գրենք նաև value
հատկությունը ընդհանրացված տիպով և ստեղծենք համապատասխան
կոնստրուկտոր:
class User <T> {
value: T;
constructor(userData: T) {
this.value = userData;
}
}
Հիմա ստեղծենք այս դասի օբյեկտ և նշանակենք դրա հատկությանը տողային արժեք.
let user = new User('john');
console.log(user.value); // 'john'
Սակայն, եթե մենք օբյեկտին արդեն նշանակել ենք տողային արժեք դրա ստեղծման ժամանակ, մեզ չի հաջողվի այդ արժեքը վերագրել մեկ այլ տիպի.
let user = new User('john');
user.value = 35;
Կոդը գործարկելու փորձի ժամանակ մենք կտեսնենք հետևյալ սխալը.
Type 'number' is not assignable to type 'string'.
Սակայն միաժամանակ մենք կարող ենք վերագրել տողային արժեքը.
let user = new User('john');
user.value = 'alex';
console.log(user.value); // 'alex'
Նկատեք, որ նույն օբյեկտի հատկությունը մեկ այլ տիպի վերագրել մենք չենք կարող, բայց կարող ենք ստեղծել ուղղակի մեկ այլ օբյեկտ.
let newUser = new User(35);
console.log(newUser.value); // 35