Τυπικές Μεταβλητές στο TypeScript

Για καλύτερη κατανόηση της έννοιας των γενικεύσεων ας δημιουργήσουμε την πρώτη μας συνάρτηση - συνάρτηση ταυτότητας. Μια τέτοια συνάρτηση επιστρέφει ακριβώς αυτό που της περάσαμε - με τον ίδιο τύπο.

Ας γράψουμε πρώτα τις παραλλαγές της συνάρτησής μας ξεχωριστά.

Ας γράψουμε μια συνάρτηση που δέχεται ως παράμετρο έναν αριθμό και επιστρέφει έναν αριθμό:

typescriptfunction func(data: number): number {
  return data;
}

Τώρα ας γράψουμε μια συνάρτηση που δέχεται ως παράμετρο ένα string και επιστρέφει ένα string:

typescriptfunction func(data: string): string {
  return data;
}

Ας υποθέσουμε τώρα ότι θέλουμε όλα αυτά να τα κάνει μία μόνη συνάρτηση. Δηλαδή θέλουμε να εκτελέσουμε γενίκευση.

Για αυτό χρησιμοποιούμε μια τυπική μεταβλητή, η οποία αποθηκεύει τον τύπο δεδομένων. Μια τέτοια μεταβλητή δηλώνεται σε γωνιακές αγκύλες πριν από τις κυκλικές αγκύλες με τις παραμέτρους της συνάρτησης. Ας δηλώσουμε μια τέτοια μεταβλητή, δίνοντάς της το όνομα T (μπορεί να είναι οποιοδήποτε):

typescriptfunction func <T>(εδώ οι παράμετροι) {
  return data;
}

Μετά από αυτό, θα έχουμε τη μεταβλητή T, την οποία μπορούμε να χρησιμοποιήσουμε για να βάλουμε τον τύπο της παραμέτρου, και στη συνέχεια να τον ορίσουμε ως επιστρεφόμενο τύπο.

Ας ορίσουμε τον τύπο της παραμέτρου μας ως τη μεταβλητή μας:

typescriptfunction func <T>(data: T) {
  return data;
}

Αποτέλεσμα είναι ότι η παράμετρος μπορεί να περαστεί σε οποιονδήποτε τύπο, και αυτός ο τύπος θα αποθηκευτεί στη μεταβλητή μας T.

Τώρα ας χρησιμοποιήσουμε την τιμή της μεταβλητής T για να καθορίσουμε το αποτέλεσμα της συνάρτησης:

typescriptfunction func <T>(data: T): T {
  return data;
}

Τώρα θα συμβαίνει ότι ο τύπος του αποτελέσματος της συνάρτησης θα προκύπτει από τον τύπο της παραμέτρου. Ας το ελέγξουμε.

Ας καλέσουμε τη συνάρτηση με έναν αριθμό:

typescriptconsole.log( func(3) );   // θα εμφανίσει 3

Ας καλέσουμε τη συνάρτηση με ένα string:

typescriptconsole.log( func('x') ); // θα εμφανίσει 'x'
Задание 1

Δημιουργήστε μια συνάρτηση που ως παράμετρο δέχεται είτε δύο αριθμούς, είτε δύο strings. Η συνάρτηση πρέπει να επιστρέφει το άθροισμα των παραμέτρων.