Ο απαριθμημένος τύπος του TypeScript είναι ένας εύχρηστος τρόπος συσκευασίας σχετικών τιμών, με σαφές νόημα.

Ένας αριθμός ή ένας απαριθμημένος τύπος είναι μια δομή δεδομένων που σας επιτρέπει να ορίσετε ένα σύνολο ονομασμένων τιμών.

Οι αριθμοί παρέχουν έναν τρόπο αναπαράστασης ενός σταθερού συνόλου τιμών ως σταθερών. Μπορούν να σας βοηθήσουν να κάνετε τον κώδικά σας πιο εκφραστικό και αυτο-τεκμηριωμένο, δίνοντας ουσιαστικά ονόματα σε συγκεκριμένες τιμές. Εδώ θα μάθετε πώς μπορείτε να χρησιμοποιήσετε τα enum στο TypeScript.

Δημιουργία Enum

Οι αριθμοί αντιπροσωπεύουν γενικά έναν σταθερό αριθμό επιλογών για μια δεδομένη τιμή. Για παράδειγμα, ένας αριθμός που αντιπροσωπεύει τα κύρια χρώματα μπορεί να έχει σταθερές τιμές για το κόκκινο, το κίτρινο και το μπλε.

Τα Enum αντιπροσωπεύουν δεδομένα ως ένα σύνολο ζευγών κλειδιών/τιμών γνωστών ως enum μέλη. Το κλειδί πρέπει να είναι πάντα μια χορδή. Ωστόσο, η τιμή—ένας αριθμός αυτόματης αύξησης από προεπιλογή—μπορεί να είναι αριθμητική, συμβολοσειρά ή υπολογισμένη.

instagram viewer

Μπορείτε να δημιουργήσετε ένα enum σε τη γλώσσα TypeScript χρησιμοποιώντας την αρίθμηση λέξη-κλειδί. Ακολουθήστε το με το όνομα του enum και ένα ζευγάρι σγουρά τιράντες ({}) που περιέχει τα enum μέλη. Μια κοινή σύμβαση ονομασίας JavaScript δηλώνει ότι τα ονόματα enum πρέπει να ξεκινούν με κεφαλαίο γράμμα.

αρίθμηση Κατεύθυνση {
Πάνω,
Κάτω,
Αριστερά,
σωστά
}

Αυτό το παράδειγμα διαθέτει ένα enum που ονομάζεται Κατεύθυνση. Το enum έχει ένα μέλος που αντιπροσωπεύει κάθε κατεύθυνση: Πάνω, Κάτω, Αριστερά και Δεξιά.

Δεδομένου ότι αυτός ο κωδικός δεν καθορίζει μια τιμή για καθένα από τα κλειδιά, το TypeScript θα εκχωρήσει αυτόματα τιμές. Το πρώτο μέλος, Up, θα έχει τιμή 0. Τα υπόλοιπα μέλη θα έχουν το καθένα μια τιμή 1 μεγαλύτερη από αυτή του προηγούμενου μέλους. Μπορείτε να το δηλώσετε ρητά εάν δυσκολεύεστε να το θυμηθείτε:

αρίθμηση Κατεύθυνση {
Πάνω = 0,
Κάτω = 1,
Αριστερά = 2,
Δεξιά = 3,
}

Ή μπορείτε να δηλώσετε ρητά διαφορετικές τιμές, αφήνοντας τις μη δηλωμένες τιμές να συνεχίσουν να αυξάνονται όπως πριν:

αρίθμηση Κατάσταση {
Ενεργός = 9,
Αδρανής, // 10
}

Σε αυτό το παράδειγμα, το Ανενεργό μέλος έχει τιμή 10. Αυτή η συμπεριφορά ισχύει για αριθμούς που έχουν μόνο αριθμητικές τιμές, όχι για αυτούς με συμβολοσειρά ή ετερογενή μέλη.

Οι διαφορετικοί τύποι Enum

Τα Enum στο TypeScript έχουν έναν σιωπηρό τύπο που βασίζονται στον τύπο των τιμών που διαθέτουν τα μέλη τους. Ο πιο συνηθισμένος τύπος είναι ο αριθμητικός αριθμός, η συμπεριφορά του οποίου καλύπτει η προηγούμενη ενότητα, αλλά υπάρχουν δύο παραλλαγές.

Αριθμοί συμβολοσειρών

Ένα string enum είναι ένα enum στο οποίο όλα τα μέλη του είναι συμβολοσειρές. Σε αντίθεση με τους αριθμητικούς αριθμούς, όπου οι τιμές εκχωρούνται αυτόματα, πρέπει να αρχικοποιήσετε κάθε μέλος με μια συμβολοσειρά:

αρίθμηση PrimaryColors {
Κόκκινο = "ΤΟ ΚΟΚΚΙΝΟ",
Κίτρινο = "ΚΙΤΡΙΝΟΣ",
Μπλε = "ΜΠΛΕ"
}

Αν και οι αριθμοί συμβολοσειρών δεν έχουν ιδιότητες αυτόματης αύξησης, μπορεί να είναι πιο λογικές αν τις σειριοποιήσετε. Οι τιμές τους θα πρέπει να εξακολουθούν να είναι περιγραφικές, χωρίς ονόματα μελών, ενώ ένα σύνολο αριθμητικών τιμών μπορεί να μην είναι αυτο-περιγραφικό.

Ετερογενείς Αριθμοί

Τα ετερογενή enums είναι τα enum που περιέχουν τόσο αριθμητικά όσο και μέλη συμβολοσειρών. Για παράδειγμα:

αρίθμηση Αποτέλεσμα {
Επιτυχία = "ΕΠΙΤΥΧΙΑ",
Αποτυχία = 0
}

Οι ετερογενείς αριθμοί είναι χρήσιμοι όταν έχετε μέλη enum που απαιτούν διαφορετικούς τύπους τιμών με βάση το συγκεκριμένο πλαίσιο ή τη σημασία κάθε μέλους. Ωστόσο, το Τεκμηρίωση TypeScript αποθαρρύνει τη χρήση ετερογενών αριθμών, καθώς εισάγουν πολυπλοκότητα που μπορεί να κάνει τον κώδικά σας πιο επιρρεπή σε σφάλματα.

Υπολογιζόμενα και σταθερά μέλη

Κάθε μέλος enum έχει μια τιμή, η οποία μπορεί να είναι σταθερή ή υπολογισμένη.

Constant Enum Μέλη

Ένα μέλος enum είναι σταθερό εάν πληροί οποιαδήποτε από τις παρακάτω προϋποθέσεις.

  1. Είναι το πρώτο μέλος του enum και δεν έχει αρχικοποιητή.
  2. Δεν έχει αρχικοποιητή και το προηγούμενο μέλος enum ήταν μια αριθμητική σταθερά.
  3. Αρχικοποιείται με μια σταθερή έκφραση enum.

Σύμφωνα με την τεκμηρίωση TypeScript, μια έκφραση σταθερού enum είναι ένα υποσύνολο παραστάσεων TypeScript που μπορεί να αξιολογηθεί πλήρως κατά το χρόνο μεταγλώττισης. Για παράδειγμα, μια συμβολοσειρά ή ένα αριθμητικό κυριολεκτικό.

Για παράδειγμα, τα μέλη των enum στο παρακάτω μπλοκ κώδικα είναι όλα σταθερά:

// ΠΕΡΙΠΤΩΣΗ 1
αρίθμηση Κατεύθυνση {
Πάνω,
Κάτω,
Αριστερά,
σωστά
}

// ΠΕΡΙΠΤΩΣΗ 2
αρίθμηση Καθημερινή {
Δευτέρα = 1,
Τρίτη,
Τετάρτη,
Πέμπτη,
Παρασκευή
}

// ΠΕΡΙΠΤΩΣΗ 3
αρίθμηση Σεζόν {
Άνοιξη = "ΑΝΟΙΞΗ",
Καλοκαίρι = "ΚΑΛΟΚΑΙΡΙ",
Φθινόπωρο = "ΦΘΙΝΟΠΩΡΟ",
Χειμώνας = "ΧΕΙΜΩΝΑΣ"
}

Όταν μετατρέπετε σταθερά μέλη enum σε απλή JavaScript, ο κώδικας που δημιουργείται χρησιμοποιεί τις κυριολεκτικές τους τιμές. Αυτό μπορεί να είναι επωφελές για την απόδοση και να διευκολύνει τον εντοπισμό σφαλμάτων.

Για παράδειγμα, εδώ είναι η μεταφρασμένη έκδοση του Season enum:

var Εποχή;
(λειτουργία (Εποχή) {
Εποχή["Ανοιξη"] = "ΑΝΟΙΞΗ";
Εποχή["Καλοκαίρι"] = "ΚΑΛΟΚΑΙΡΙ";
Εποχή["Φθινόπωρο"] = "ΦΘΙΝΟΠΩΡΟ";
Εποχή["Χειμώνας"] = "ΧΕΙΜΩΝΑΣ";
})(Season || (Season = {}));

Υπολογισμένο Αριθμό Μελών

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

αρίθμηση Μέγεθος {
Μικρό = 1,
Μέσο = υπολογισμός μεγέθους(12),
Μεγάλο = ΥπολογισμόςΜέγεθος(5)
}

λειτουργίαυπολογισμός μεγέθους(αξία: αριθμός): αριθμός{
ΕΠΙΣΤΡΟΦΗ αξία * 5;
}

κονσόλα.log (Μέγεθος. Μεγάλο)

ο Μέγεθος Το enum έχει τρία μέλη: Μικρό, Μεσαίο, και Μεγάλο. Εκχωρεί ρητά την τιμή 1 στο Small μέλος. ο Μεσαίο και Μεγάλο τα μέλη χρησιμοποιούν μια συνάρτηση υπολογισμός μεγέθους για να υπολογίσετε τις τιμές τους κατά το χρόνο εκτέλεσης.

Όταν εργάζεστε με υπολογισμένα μέλη αριθμών, είναι σημαντικό να σημειωθεί ότι οι τιμές δεν είναι γνωστές μέχρι το χρόνο εκτέλεσης. Αυτό μπορεί να δημιουργήσει περισσότερη πολυπλοκότητα και δυνατότητες σφάλματα χρόνου εκτέλεσης σε σύγκριση με τα μέλη enum με σταθερές τιμές.

Για παράδειγμα:

var Μέγεθος;
(λειτουργία (Μέγεθος) {
Μέγεθος[Μέγεθος["Μικρό"] = 1] = "Μικρό";
Μέγεθος[Μέγεθος["Μεσαίο"] = υπολογισμός μεγέθους(12)] = "Μεσαίο";
Μέγεθος[Μέγεθος["Μεγάλο"] = υπολογισμός μεγέθους(5)] = "Μεγάλο";
})(Μέγεθος || (Μέγεθος = {}));

κονσόλα.κούτσουρο(Μέγεθος.Μεγάλο)

Το μπλοκ κώδικα παραπάνω είναι η μεταφρασμένη έκδοση του Μέγεθος αρίθμηση. Παρατηρήστε πώς το TypeScript δεν περιλαμβάνει τις επιστρεφόμενες τιμές από τοcalSize() στον κώδικα JavaScript. Αντίθετα, περιλαμβάνει την αρχική κλήση συνάρτησης έτσι ώστε η JavaScript να καθορίζει τις τιμές κατά το χρόνο εκτέλεσης.

Πρόσβαση στις τιμές Enum

Μπορείτε να αποκτήσετε πρόσβαση στις τιμές των μελών enum χρησιμοποιώντας τον συμβολισμό της κουκκίδας αντικειμένου.

Για παράδειγμα:

αρίθμηση Κατεύθυνση {
Πάνω = 0,
Κάτω = 1,
Αριστερά = 2,
Δεξιά = 3,
}

κονσόλα.log (Κατεύθυνση. Αριστερά) // 2

Αντίστροφη αντιστοίχιση αριθμητικών αριθμών

Η αντίστροφη αντιστοίχιση σε αριθμητικούς αριθμούς αναφέρεται στη δυνατότητα ανάκτησης του αντίστοιχου ονόματος μέλους enum από την τιμή του. Αυτό μπορεί να είναι ιδιαίτερα χρήσιμο όταν εργάζεστε με αριθμητικές τιμές, τις οποίες ίσως χρειαστεί να αποκωδικοποιήσετε.

Από προεπιλογή, οι τιμές enum στο TypeScript αντιστοιχίζονται προς τα εμπρός, που σημαίνει ότι μπορείτε να έχετε πρόσβαση μόνο στην τιμή που σχετίζεται με ένα όνομα. Ωστόσο, μπορείτε να εκτελέσετε με μη αυτόματο τρόπο αντίστροφη αντιστοίχιση για να ανακτήσετε το μέλος enum με βάση την τιμή του.

Για παράδειγμα:

αρίθμηση Κατεύθυνση {
Πάνω = 1,
Κάτω,
Αριστερά,
σωστά
}

λειτουργίαgetDirectionName(τιμή κατεύθυνσης: αριθμός): σειρά{
// Αντίστροφη χαρτογράφηση
συνθ directionName = Κατεύθυνση[directionValue];
ΕΠΙΣΤΡΟΦΗ κατεύθυνσηΌνομα;
}

κονσόλα.log (getDirectionName(1)); // "Πάνω"
κονσόλα.log (getDirectionName(3)); // "Αριστερά"

Αυτό getDirectionName Η συνάρτηση εκτελεί αντίστροφη αντιστοίχιση με πρόσβαση στο όνομα μέλους enum χρησιμοποιώντας την τιμή του ως ευρετήριο. Η συνάρτηση παίρνει α τιμή κατεύθυνσης ως όρισμα και ανακτά το αντίστοιχο όνομα μέλους enum χρησιμοποιώντας Κατεύθυνση[directionValue].

Η αντίστροφη αντιστοίχιση μπορεί να είναι χρήσιμη σε σενάρια όπου έχετε μια αριθμητική τιμή και πρέπει να προσδιορίσετε το αντίστοιχο όνομα μέλους enum. Παρέχει έναν βολικό τρόπο εργασίας με enums τόσο προς τα εμπρός όσο και προς τα πίσω.

Υπάρχουν πολλές εφαρμογές του Enums

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

Είτε χρειάζεται να αναπαραστήσετε ένα πεπερασμένο σύνολο επιλογών είτε να διαχειριστείτε σύνθετες μεταβάσεις καταστάσεων, τα enum στο TypeScript είναι ένα πολύτιμο εργαλείο για τη βελτίωση της σαφήνειας και της δομής του κώδικά σας.