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