Περιορισμοί γενικευμένων τύπων στο TypeScript
Σε ένα από τα προηγούμενα μαθήματα, δημιουργήσαμε μια συνάρτηση γενικευμένου τύπου που έπρεπε να επιστρέφει το μήκος της παραμέτρου που της μεταβιβάστηκε. Ωστόσο, κατά τη μεταγλώττιση εμφανίστηκε σφάλμα, καθώς δεν έχουν όλοι οι τύποι μήκος:
function myFunc < T > (data: T): T {
console.log(data.length); // σφάλμα
return data;
}
Σε εκείνη την περίπτωση διορθώσαμε την κατάσταση, αλλάζοντας
τον γενικευμένο τύπο σε τύπο γενικευμένου πίνακα.
Αλλά στο TypeScript υπάρχει δυνατότητα δημιουργίας
περιορισμών για τους γενικευμένους τύπους. Για να το κάνουμε αυτό, στις γωνιακές
αγκύλες, μετά τη μεταβλητή T γράφουμε
τη λέξη-κλειδί extends. Μετά από αυτή
σε άγκιστρα γράφουμε μια νέα
μεταβλητή str τύπου string.
Ο υπόλοιπος κώδικας της συνάρτησης παραμένει χωρίς
αλλαγές:
function myFunc <T extends {str: string}> (data: T): void {
console.log(data.str.length);
}
Αποδεικνύεται ότι ο γενικευμένος τύπος κληρονομεί τον τύπο
της μεταβλητής str, που ορίστηκε στα άγκιστρα.
Τώρα ας ελέγξουμε τη λειτουργία
της συνάρτησής μας και ας δημιουργήσουμε μια μεταβλητή myStr,
που αναφέρεται στον τύπο str, και ας ορίσουμε
την τιμή της σε άγκιστρα:
let myStr: {str: string} = {str: 'abcde'};
Ας καλέσουμε τη συνάρτηση myFunc, χωρίς
να ξεχνάμε να ορίσουμε ξανά τον τύπο της και να μεταβιβάσουμε
τη μεταβλητή myStr ως παράμετρο:
myFunc <{str: string}> (myStr);
Βασισμένοι στο παράδειγμα που εξετάστηκε στο μάθημα, ορίστε μια συνάρτηση για την εύρεση του μήκους ενός αριθμητικού πίνακα.