Domanda

Sto lavorando su un file di definizioni per l'API di Google Maps per i dattiloscritti.

E ho bisogno di definire un enum come il tipo ad es.google.maps.Animation che contiene due proprietà: BOUNCE e DROP.

Come dovrebbe essere fatto in dattiloscritto?

È stato utile?

Soluzione

dattilografo 0.9+ ha una specifica per Enums:

enum AnimationType {
    BOUNCE,
    DROP,
}
.

L'ultima virgola è facoltativa.

Altri suggerimenti

A partire da dattilvi 0.9 (Attualmente un rilascio alfa) È possibile utilizzare la definizione enum come questa:

enum TShirtSize {
  Small,
  Medium,
  Large
}

var mySize = TShirtSize.Large;
.

Per impostazione predefinita, queste enumerazioni verranno assegnate rispettivamente 0, 1 e 2.Se si desidera impostare esplicitamente questi numeri, puoi farlo come parte della Dichiarazione Enum.

Elenco 6.2 Enumerazioni con membri espliciti

enum TShirtSize {
  Small = 3,
  Medium = 5,
  Large = 8
}

var mySize = TShirtSize.Large;
.

Entrambi questi esempi sollevati direttamente da dattiloscritto per i programmatori JavaScript .

Si noti che questo è diverso dalla specifica 0.8. La specifica 0.8 sembrava questo - ma è stato contrassegnato come sperimentale e probabile cambiare, quindi dovrai aggiornare qualsiasi vecchio codice: .

Disclaimer - Questo esempio 0.8 sarebbe rotto nelle versioni più recenti del compilatore dattilografo.

enum TShirtSize {
  Small: 3,
  Medium: 5,
  Large: 8
}

var mySize = TShirtSize.Large;
.

Questo è ora parte della lingua.Vedi dawscriptlang.org> Tipi di base> Enum per la documentazione su questo.Un estratto dalla documentazione su come utilizzare questi enumera:

enum Color {Red, Green, Blue};
var c: Color = Color.Green;
.

o con numeri di supporto manuali:

enum Color {Red = 1, Green = 2, Blue = 4};
var c: Color = Color.Green;
.

Puoi anche tornare al nome Enum utilizzando ad esempio Color[2].

Ecco un esempio di come questo è tutto insieme:

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();
.

Questo registro:

.
undefined  
2  
Blue
.

Perché, al momento della scrittura di questo, il parco giochi da solo genere genererà questo codice:

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();
.

Solo un'altra nota che è possibile Enum ID / String con quanto segue:

class EnumyObjects{
    public static BOUNCE={str:"Bounce",id:1};
    public static DROP={str:"Drop",id:2};
    public static FALL={str:"Fall",id:3};


}
.

Aggiornamento :

Come notato da @ IX3, dattilografo 2.4 ha il supporto per le stringhe di Enum.

See: Crea un enum con valori di stringa in Dattilografo


.

Risposta originale:

Per i valori dei membri della stringa, il dattilografia consente solo numeri come valori membri di Enum. Ma ci sono alcune soluzioni / hack che puoi implementare;

Soluzione 1:

copiati da: https://blog.rsuter.com/how-to-implement-an-enum-with-string-values-in-typescript/

C'è una soluzione semplice: ha appena lanciato la stringa letterale a qualsiasi prima di assegnare:

export enum Language {
    English = <any>"English",
    German = <any>"German",
    French = <any>"French",
    Italian = <any>"Italian"
}
.

Soluzione 2:

copiato da: https://basarat.gitbooks.io /typescript/content/docs/types/literal-types.html

È possibile utilizzare una stringa letterale come tipo. Ad esempio:

let foo: 'Hello';
.

Qui abbiamo creato una variabile chiamata foo che consentirà solo il valore letterale "Ciao" di essere assegnato ad esso. Questo è dimostrato di seguito:

let foo: 'Hello';
foo = 'Bar'; // Error: "Bar" is not assignable to type "Hello"
.

Non sono molto utili da soli, ma possono essere combinati in un'unione di tipo per creare una potente (e utile) astrazione E.G.:

type CardinalDirection =
    "North"
    | "East"
    | "South"
    | "West";

function move(distance: number, direction: CardinalDirection) {
    // ...
}

move(1,"North"); // Okay
move(1,"Nurth"); // Error!
.

Enums in dattiplica:

Enums sono inseriti nel linguaggio dattilografo per definire un insieme di costanti denominate. L'utilizzo di Enums può rendere la nostra vita più facile. La ragione di ciò è che queste costanti sono spesso più facili da leggere rispetto al valore che l'enum rappresenta.

Creazione di un enum:
enum Direction {
    Up = 1,
    Down,
    Left,
    Right,
}
.

Questo esempio dei Documenti dattilga spiega molto bene come funziona enumum. Si noti che il nostro primo valore Enum (UP) è inizializzato con 1. Tutti i seguenti membri del numero enum sono quindi automaticamente incrementati da questo valore (cioè giù= 2, sinistra= 3, destra= 4) . Se non iniziassi il primo valore con 1 l'enum inizierà a 0 e poi l'incremento automatico (I.e. Down= 1, sinistra= 2, destra= 3).

usando un enum:

Possiamo accedere ai valori dell'enum nel modo seguente:

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

Si noti che questo modo siamo molto più descrittivo nel modo in cui scriviamo il nostro codice. Gli enogiani praticamente ci impediscono di utilizzare i numeri magici Magic (numeri che rappresentano una certa entità perché il programmatore ha un significato a loro in un determinato contesto). I numeri magici sono cattivi a causa dei seguenti motivi:

    .
  1. Abbiamo bisogno di pensare più difficile, prima abbiamo bisogno di tradurre il numero in un'entità prima che possiamo ragionare il nostro codice.
  2. Se esaminiamo il nostro codice dopo un lungo periodo, o altri programmatori revisione del nostro codice, non sapevano necessariamente cosa si intende con questi numeri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top