Δουλεύω σε ένα αρχείο ορισμών για το API Χαρτών Google για γραφομηχανή.
Και εγώ πρέπει να ορίσετε ένα enum σαν είδος, π.χ.. google.maps.Animationτο οποίο περιέχει δύο ιδιότητες: BOUNCEκαι DROP.
Πώς θα πρέπει αυτό να γίνει με γραφομηχανή;
Δουλεύω σε ένα αρχείο ορισμών για το API Χαρτών Google για γραφομηχανή.
Και εγώ πρέπει να ορίσετε ένα enum σαν είδος, π.χ.. google.maps.Animationτο οποίο περιέχει δύο ιδιότητες: BOUNCEκαι DROP.
Πώς θα πρέπει αυτό να γίνει με γραφομηχανή;
Γραφομηχανή 0.9+ έχει μια προδιαγραφή για enums:
enum AnimationType {
BOUNCE,
DROP,
}
Το τελικό κόμμα είναι προαιρετική.
Από γραφομηχανή 0.9 (επί του παρόντος μια έκδοση alpha), μπορείτε να χρησιμοποιήσετε τον ορισμό απαρίθμησης ως εξής:
enum TShirtSize {
Small,
Medium,
Large
}
var mySize = TShirtSize.Large;
Από προεπιλογή, αυτές οι απαριθμήσεις θα ανατεθεί 0, 1 και 2 αντίστοιχα. Αν θέλετε να ορίσετε ρητά αυτούς τους αριθμούς, μπορείτε να το κάνετε ως μέρος της δήλωσης απαρίθμησης.
Λίστα 6.2 Απαριθμήσεις με ρητή μέλη
enum TShirtSize {
Small = 3,
Medium = 5,
Large = 8
}
var mySize = TShirtSize.Large;
Και τα δύο αυτά παραδείγματα αρθεί άμεσα από γραφομηχανή για JavaScript προγραμματιστές .
Σημειώστε ότι αυτό είναι διαφορετικό στην προδιαγραφή 0.8. Η προδιαγραφή 0.8 έμοιαζε με αυτό - αλλά χαρακτηρίστηκε ως πειραματική και ενδέχεται να αλλάξει, έτσι θα πρέπει να ενημερώσει την παλιά Κωδικός:
Αποποίηση ευθυνών - αυτό το παράδειγμα 0.8, θα πρέπει να σπάσει σε νεότερες εκδόσεις του compiler γραφομηχανή.
enum TShirtSize {
Small: 3,
Medium: 5,
Large: 8
}
var mySize = TShirtSize.Large;
Αυτό είναι τώρα μέρος της γλώσσας. Δείτε TypeScriptLang.org> Βασικά είδη> απαρίθμησης για την τεκμηρίωση σχετικά με αυτό. Ένα απόσπασμα από την τεκμηρίωση σχετικά με το πώς να χρησιμοποιήσετε αυτές τις enums:
enum Color {Red, Green, Blue};
var c: Color = Color.Green;
Ή με το χέρι αριθμούς υποστήριξη:
enum Color {Red = 1, Green = 2, Blue = 4};
var c: Color = Color.Green;
Μπορείτε επίσης να πάτε πίσω στο όνομα της απαρίθμησης, χρησιμοποιώντας για παράδειγμα Color[2].
Εδώ είναι ένα παράδειγμα του πώς αυτό όλα πάνε μαζί:
module myModule {
export enum Color {Red, Green, Blue};
export class MyClass {
myColor: Color;
constructor() {
console.log(this.myColor);
this.myColor = Color.Blue;
console.log(this.myColor);
console.log(Color[this.myColor]);
}
}
}
var foo = new myModule.MyClass();
Αυτό θα συνδεθείτε:
undefined 2 Blue
Επειδή, κατά το χρόνο σύνταξης της παρούσας, η γραφομηχανή χαρά θα δημιουργήσει αυτόν τον κωδικό:
var myModule;
(function (myModule) {
(function (Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Blue"] = 2] = "Blue";
})(myModule.Color || (myModule.Color = {}));
var Color = myModule.Color;
;
var MyClass = (function () {
function MyClass() {
console.log(this.myColor);
this.myColor = Color.Blue;
console.log(this.myColor);
console.log(Color[this.myColor]);
}
return MyClass;
})();
myModule.MyClass = MyClass;
})(myModule || (myModule = {}));
var foo = new myModule.MyClass();
Απλά ένα ακόμα Σημειώστε ότι μπορείτε να το enum id / string με το ακόλουθο:
class EnumyObjects{
public static BOUNCE={str:"Bounce",id:1};
public static DROP={str:"Drop",id:2};
public static FALL={str:"Fall",id:3};
}
Ενημέρωση :
Όπως σημείωσε ο @ iX3, γραφομηχανή 2.4 έχει υποστήριξη για έγχορδα απαρίθμησης.
Δείτε: Δημιουργήστε ένα enum με τιμές συμβολοσειράς με γραφομηχανή
Αρχικό απάντηση:
Για τιμές μέλος String, γραφομηχανή επιτρέπει μόνο αριθμούς ως αξίες μέλος απαρίθμησης. Αλλά υπάρχουν μερικές λύσεις / hacks μπορείτε να εφαρμόσετε?
Λύση 1:
αντιγράφονται από: https://blog.rsuter.com/how-to-implement-an-enum-with-string-values-in-typescript/
Υπάρχει μια απλή λύση: Απλά ρίχνει το λεκτικό string σε οποιοδήποτε πριν από την ανάθεση:
export enum Language {
English = <any>"English",
German = <any>"German",
French = <any>"French",
Italian = <any>"Italian"
}
Διάλυμα 2:
αντιγράφονται από: https://basarat.gitbooks.io/typescript/content/docs/types/literal-types.html
Μπορείτε να χρησιμοποιήσετε μια σειρά κυριολεκτική ως είδος. Για παράδειγμα:
let foo: 'Hello';
Εδώ έχουμε δημιουργήσει μια μεταβλητή που ονομάζεται foo που θα επιτρέπει μόνο την κυριολεκτική τιμή «Hello» που θα διατεθεί για αυτό. Αυτό αποδεικνύεται παρακάτω:
let foo: 'Hello';
foo = 'Bar'; // Error: "Bar" is not assignable to type "Hello"
Δεν είναι πολύ χρήσιμο για τη δική τους, αλλά μπορούν να συνδυαστούν σε μια ένωση του τύπου για να δημιουργήσει ένα ισχυρό (και χρήσιμο) αφαίρεση π.χ.
type CardinalDirection =
"North"
| "East"
| "South"
| "West";
function move(distance: number, direction: CardinalDirection) {
// ...
}
move(1,"North"); // Okay
move(1,"Nurth"); // Error!
Οι Enums τεθεί σε γλώσσα γραφομηχανή για να καθορίσει ένα σύνολο που ονομάζεται σταθερές. Χρησιμοποιώντας enums μπορούν να κάνουν τη ζωή μας πιο εύκολη. Ο λόγος για αυτό είναι ότι αυτές οι σταθερές είναι συχνά ευκολότερο να διαβάσει από την τιμή που αντιπροσωπεύει το απαρίθμησης.
enum Direction {
Up = 1,
Down,
Left,
Right,
}
Αυτό το παράδειγμα από την docs γραφομηχανή εξηγεί πολύ καλά πώς λειτουργούν enums. Σημειώστε ότι η πρώτη μας τιμή απαρίθμησης (Up) ξεκινά με 1. Όλα τα ακόλουθα μέλη του αριθμού απαρίθμησης είναι τότε αυτόματα αυξάνεται από την τιμή αυτή (δηλαδή κάτω = 2, αριστερά = 3, δεξιά = 4). Αν δεν είχαμε προετοιμάσει την πρώτη τιμή με 1 το απαρίθμησης θα ξεκινούν από το 0 και, στη συνέχεια, την αυτόματη αύξηση (δηλαδή Down = 1, αριστερά = 2, δεξιά = 3).
Μπορούμε να αποκτήσετε πρόσβαση στις τιμές της απαρίθμησης με τον ακόλουθο τρόπο:
Direction.Up; // first the enum name, then the dot operator followed by the enum value
Direction.Down;
Σημειώστε ότι με αυτό τον τρόπο θα είναι πολύ πιο περιγραφικό με τον τρόπο που γράφουμε κώδικα μας. Enums βασικά μας αποτρέψει από τη χρήση τους αριθμούς μαγεία (οι αριθμοί που αντιπροσωπεύουν κάποια οντότητα, επειδή ο προγραμματιστής έχει δώσει ένα νόημα για να τους σε ένα συγκεκριμένο πλαίσιο). Magic αριθμοί είναι κακό, διότι από τους παρακάτω λόγους: