Γενικευμένες Κλάσεις στο TypeScript
Εκτός από γενικευμένα interfaces στο TypeScript μπορούμε να φτιάξουμε και γενικευμένες κλάσεις.
Ας δημιουργήσουμε μια κλάση User γενικευμένου
τύπου. Ας γράψουμε επίσης την ιδιότητα value
γενικευμένου τύπου και ας φτιάξουμε τον αντίστοιχο
κατασκευαστή (constructor):
typescriptclass User <T> {
value: T;
constructor(userData: T) {
this.value = userData;
}
}
Τώρα ας φτιάξουμε ένα αντικείμενο αυτής της κλάσης και ας του ορίσουμε ως ιδιότητα μια τιμή string:
typescriptlet user = new User('john');
console.log(user.value); // 'john'
Ωστόσο, εάν έχουμε ήδη ορίσει στο αντικείμενο κατά την κλήση του μια τιμή string, δεν θα μπορέσουμε να ξαναγράψουμε αυτή την τιμή σε διαφορετικό τύπο:
typescriptlet user = new User('john');
user.value = 35;
Σε μια προσπάθεια εκτέλεσης του κώδικα θα δούμε το ακόλουθο σφάλμα:
typescriptType 'number' is not assignable to type 'string'.
Αλλά ταυτόχρονα μπορούμε να ξαναγράψουμε την τιμή string:
typescriptlet user = new User('john');
user.value = 'alex';
console.log(user.value); // 'alex'
Σημειώστε ότι δεν μπορούμε να ξαναγράψουμε μια ιδιότητα του ίδιου αντικειμένου σε διαφορετικό τύπο, αλλά μπορούμε απλά να δημιουργήσουμε ένα διαφορετικό αντικείμενο:
typescriptlet newUser = new User(35);
console.log(newUser.value); // 35