Πώς να δημιουργήσετε απαρίθμησης, όπως ο τύπος στη γραφομηχανή;

ψήφοι
84

Δουλεύω σε ένα αρχείο ορισμών για το API Χαρτών Google για γραφομηχανή.

Και εγώ πρέπει να ορίσετε ένα enum σαν είδος, π.χ.. google.maps.Animationτο οποίο περιέχει δύο ιδιότητες: BOUNCEκαι DROP.

Πώς θα πρέπει αυτό να γίνει με γραφομηχανή;

Δημοσιεύθηκε 02/10/2012 στις 10:29
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
101

Γραφομηχανή 0.9+ έχει μια προδιαγραφή για enums:

enum AnimationType {
    BOUNCE,
    DROP,
}

Το τελικό κόμμα είναι προαιρετική.

Απαντήθηκε 02/10/2012 στις 10:45
πηγή χρήστη

ψήφοι
56

Από γραφομηχανή 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;
Απαντήθηκε 02/10/2012 στις 10:40
πηγή χρήστη

ψήφοι
19

Αυτό είναι τώρα μέρος της γλώσσας. Δείτε 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();
Απαντήθηκε 17/08/2015 στις 13:23
πηγή χρήστη

ψήφοι
14

Απλά ένα ακόμα Σημειώστε ότι μπορείτε να το 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};


}
Απαντήθηκε 05/10/2012 στις 00:29
πηγή χρήστη

ψήφοι
6

Ενημέρωση :

Όπως σημείωσε ο @ 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!
Απαντήθηκε 22/11/2016 στις 11:30
πηγή χρήστη

ψήφοι
1

Enums με τυπογραφικούς χαρακτήρες:

Οι Enums τεθεί σε γλώσσα γραφομηχανή για να καθορίσει ένα σύνολο που ονομάζεται σταθερές. Χρησιμοποιώντας enums μπορούν να κάνουν τη ζωή μας πιο εύκολη. Ο λόγος για αυτό είναι ότι αυτές οι σταθερές είναι συχνά ευκολότερο να διαβάσει από την τιμή που αντιπροσωπεύει το απαρίθμησης.

Δημιουργία μιας απαρίθμησης:

enum Direction {
    Up = 1,
    Down,
    Left,
    Right,
}

Αυτό το παράδειγμα από την docs γραφομηχανή εξηγεί πολύ καλά πώς λειτουργούν enums. Σημειώστε ότι η πρώτη μας τιμή απαρίθμησης (Up) ξεκινά με 1. Όλα τα ακόλουθα μέλη του αριθμού απαρίθμησης είναι τότε αυτόματα αυξάνεται από την τιμή αυτή (δηλαδή κάτω = 2, αριστερά = 3, δεξιά = 4). Αν δεν είχαμε προετοιμάσει την πρώτη τιμή με 1 το απαρίθμησης θα ξεκινούν από το 0 και, στη συνέχεια, την αυτόματη αύξηση (δηλαδή Down = 1, αριστερά = 2, δεξιά = 3).

Χρησιμοποιώντας ένα enum:

Μπορούμε να αποκτήσετε πρόσβαση στις τιμές της απαρίθμησης με τον ακόλουθο τρόπο:

Direction.Up;     // first the enum name, then the dot operator followed by the enum value
Direction.Down;

Σημειώστε ότι με αυτό τον τρόπο θα είναι πολύ πιο περιγραφικό με τον τρόπο που γράφουμε κώδικα μας. Enums βασικά μας αποτρέψει από τη χρήση τους αριθμούς μαγεία (οι αριθμοί που αντιπροσωπεύουν κάποια οντότητα, επειδή ο προγραμματιστής έχει δώσει ένα νόημα για να τους σε ένα συγκεκριμένο πλαίσιο). Magic αριθμοί είναι κακό, διότι από τους παρακάτω λόγους:

  1. Πρέπει να σκεφτούμε πιο δύσκολο, πρέπει πρώτα να μεταφράσει τον αριθμό σε μια οντότητα για να μπορέσουμε να λόγο σχετικά με τον κωδικό μας.
  2. Εάν εξετάζουμε τον κωδικό μας μετά από ένα μεγάλο χρονικό διάστημα, ή άλλους προγραμματιστές επανεξετάσει τον κωδικό μας, δεν ξέρουν απαραιτήτως τι σημαίνει με αυτούς τους αριθμούς.
Απαντήθηκε 15/11/2018 στις 21:00
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more