Come creare Enum come il tipo di dattiloscritto?
-
12-12-2019 - |
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?
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,
}
.
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:
.
- Abbiamo bisogno di pensare più difficile, prima abbiamo bisogno di tradurre il numero in un'entità prima che possiamo ragionare il nostro codice.
- 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.
Direction.Up; // first the enum name, then the dot operator followed by the enum value
Direction.Down;