Χρήση Τυπικών Παραμέτρων σε Περιορισμούς Generics στο TypeScript
Επίσης, στο TypeScript υπάρχει η δυνατότητα δήλωσης μιας τυπικής παραμέτρου, η οποία θα περιορίζεται από μια άλλη τυπική παράμετρο. Αυτό είναι απαραίτητο όταν πρέπει να αντιγράψουμε ιδιότητες από ένα αντικείμενο σε ένα άλλο, ενώ ταυτόχρονα να προστατευτούμε από το ότι μπορεί να μεταφέρουμε μια επιπλέον ιδιότητα.
Ας εξετάσουμε το ακόλουθο παράδειγμα. Ας
επιστρέψουμε ξανά στη συνάρτηση myFunc, που ορίζει
το μήκος μιας μεταβλητής:
function myFunc <T> (data: T): T {
console.log(data.length); // σφάλμα
return data;
}
Ωστόσο, τώρα θέλουμε αυτή η συνάρτηση
να λειτουργεί μόνο με τους τύπους που
έχουν την ιδιότητα length. Για να το κάνουμε αυτό, ας δημιουργήσουμε
τη διεπαφή ILength, στην οποία θα ορίσουμε
την ιδιότητα length αριθμητικού τύπου:
interface ILength {
length: number;
}
Στη συνέχεια, στη συνάρτησή μας θα ορίσουμε έναν γενικευμένο
τύπο, που κληρονομεί από το ILength
μέσω της λέξης-κλειδιού extends:
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Ας δούμε τον πλήρη κώδικά μας:
interface ILength {
length: number;
}
function myFunc <T extends ILength> (data: T): T {
console.log(data.length);
return data;
}
Ας ελέγξουμε τη λειτουργία της συνάρτησής μας και ας βρούμε το μήκος μιας συμβολοσειράς:
console.log(myFunc('abcde'));
Αποτέλεσμα του εκτελεσμένου κώδικα:
5
'abcde'
Και τώρα ας περάσουμε μια πλειάδα ως παράμετρο:
console.log(myFunc(['a', 'b', 'c']));
Αποτέλεσμα του εκτελεσμένου κώδικα:
3
[ 'a', 'b', 'c' ]