Crie uma enumeração com valores de sequência

262

O código a seguir pode ser usado para criar um enumno TypeScript:

enum e {
    hello = 1,
    world = 2
};

E os valores podem ser acessados ​​por:

e.hello;
e.world;

Como crio um enumcom valores de string?

enum e {
    hello = "hello", // error: cannot convert string to e
    world = "world"  // error 
};
FacePalm
fonte
heads-up tipos Singleton sob a forma de cordas tipos literais 1003 # deve resolver este
Andreas Frische

Respostas:

409

TypeScript 2.4

Agora tem enumerações de strings para que seu código funcione:

enum E {
    hello = "hello",
    world = "world"
};

🌹

TypeScript 1.8

Desde o TypeScript 1.8, você pode usar tipos literais de strings para fornecer uma experiência confiável e segura para valores de strings nomeados (que é parcialmente para o que são usadas as enumerações).

type Options = "hello" | "world";
var foo: Options;
foo = "hello"; // Okay 
foo = "asdf"; // Error!

Mais: https://www.typescriptlang.org/docs/handbook/advanced-types.html#string-literal-types

Suporte herdado

As enums no TypeScript são baseadas em números.

Você pode usar uma classe com membros estáticos:

class E
{
    static hello = "hello";
    static world = "world"; 
}

Você também pode ficar claro:

var E = {
    hello: "hello",
    world: "world"
}

Atualização: com base no requisito de poder fazer algo como var test:E = E.hello;o seguinte satisfaz isso:

class E
{
    // boilerplate 
    constructor(public value:string){    
    }

    toString(){
        return this.value;
    }

    // values 
    static hello = new E("hello");
    static world = new E("world");
}

// Sample usage: 
var first:E = E.hello;
var second:E = E.world;
var third:E = E.hello;

console.log("First value is: "+ first);
console.log(first===third); 
basarat
fonte
Pequena melhoria:toString(): string { return this.value; }
psulek
@psulek Na verdade, o texto datilografado inferirá que toStringretorna uma string, pois ela retorna this.valuee valueé do tipo string. Então você não pode fazer var x:number = E.hello.toString();e se você faz var x = E.hello.toString();x é inferido para ser do tipo stringbem :)
basarat
2
@BASarat É verdade que o texto datilografado lida com esse caso, mas eu sempre quis ter métodos decorados com tipos de retorno toda vez que o conhecemos, mesmo que não seja necessário para o compilador ts, mas para nós, programadores, sabermos quando vimos a definição do método. digite que retorna.
Psulek
@basarat existe alguma desvantagem em substituir o get()método return this.value? Dessa forma, ele retornará o valor da string sempre que acessado e não apenas durante a conversão toString().
John
@basarat Se você tiver vários "enums" como esse, o compilador não fará distinção entre eles por causa da tipagem estrutural - o compilador verá valuemembros em todos os tipos e os tratará como tipos comparáveis. Você pode tornar o valuemembro privado. Dessa forma, o compilador não o verá e não tentará aplicar a tipagem estrutural.
precisa
113

Na versão mais recente (1.0RC) do TypeScript, você pode usar enumerações como esta:

enum States {
    New,
    Active,
    Disabled
} 

// this will show message '0' which is number representation of enum member
alert(States.Active); 

// this will show message 'Disabled' as string representation of enum member
alert(States[States.Disabled]);

Atualização 1

Para obter o valor numérico do membro enum do valor da string, você pode usar este:

var str = "Active";
// this will show message '1'
alert(States[str]);

Atualização 2

No mais recente TypeScript 2.4, foram introduzidas enumerações de string, assim:

enum ActionType {
    AddUser = "ADD_USER",
    DeleteUser = "DELETE_USER",
    RenameUser = "RENAME_USER",

    // Aliases
    RemoveUser = DeleteUser,
}

Para mais informações sobre o TypeScript 2.4, leia o blog no MSDN .

psulek
fonte
2
Geralmente, essa solução é preferida (como uma enum real), no entanto, você está muito restrito ao nome do enum (daí a 'string').
JasonS 4/02
2
Melhor solução a partir de hoje.
Alon Amir
2
Alguma novidade nisso? Porque States[str]não funciona hoje em dia. Type 'string' is not assignable to type 'States'
precisa saber é o seguinte
1
@MrCroft Você pode usar: States[str as any]para fazer na versão atual (2.x) do Typescript.
Psulek
States [str] é o que eu estava procurando. Obrigado!
Martin Konicek em
81

TypeScript 2.4+

Agora você pode atribuir valores de sequência diretamente aos membros da enumeração:

enum Season {
    Winter = "winter",
    Spring = "spring",
    Summer = "summer",
    Fall = "fall"
}

Veja # 15486 para mais informações.

TypeScript 1.8+

No TypeScript 1.8+, você pode criar um tipo literal de sequência para definir o tipo e um objeto com o mesmo nome para a lista de valores. Ele imita o comportamento esperado de um enum de string.

Aqui está um exemplo:

type MyStringEnum = "member1" | "member2";

const MyStringEnum = {
    Member1: "member1" as MyStringEnum,
    Member2: "member2" as MyStringEnum
};

O que funcionará como um enum de string:

// implicit typing example
let myVariable = MyStringEnum.Member1; // ok
myVariable = "member2";                // ok
myVariable = "some other value";       // error, desired

// explict typing example
let myExplicitlyTypedVariable: MyStringEnum;
myExplicitlyTypedVariable = MyStringEnum.Member1; // ok
myExplicitlyTypedVariable = "member2";            // ok
myExplicitlyTypedVariable = "some other value";   // error, desired

Certifique-se de digitar todas as seqüências de caracteres no objeto! Caso contrário, no primeiro exemplo acima, a variável não seria implicitamente digitada MyStringEnum.

David Sherret
fonte
1
Como posso definir algo semelhante em um arquivo de declaração?
Zev Spitz
@ZevSpitz você pode fazer isso
David Sherret
Vale ressaltar que, com o compilador atual, você pode digitar incorretamente os valores de seqüência de caracteres em MyStringEnum e ele não irá reclamar. Eu tenho criado uma interface 'Enforcer' para garantir que minhas strings sejam sempre válidas. Por exemplo: interface MyStringEnumEnforcer {Member1: MyStringEnum, Member2: MyStringEnum} Em seguida, const MyStringEnum: MyStringEnumEnforcer = {Member1: "member1", Member2: "member2"} Isso não permite seqüências de caracteres digitadas incorretamente, embora o compilador possa acabar funcionando para o seu cenário original eventualmente. Há muita cerimônia com essa abordagem, mas eu gosto da segurança.
jmorc
40

No TypeScript 0.9.0.1, embora ocorra um erro no compilador, ele ainda pode compilar o arquivo ts no arquivo js. O código funciona como esperado e o Visual Studio 2012 pode oferecer suporte para o preenchimento automático de código.

Atualização:

Na sintaxe, o TypeScript não nos permite criar uma enumeração com valores de string, mas podemos hackear o compilador: p

enum Link
{
    LEARN   =   <any>'/Tutorial',
    PLAY    =   <any>'/Playground',
    GET_IT  =   <any>'/#Download',
    RUN_IT  =   <any>'/Samples',
    JOIN_IN =   <any>'/#Community'
}

alert('Link.LEARN:    '                     + Link.LEARN);
alert('Link.PLAY:    '                      + Link.PLAY);
alert('Link.GET_IT:    '                    + Link.GET_IT);
alert('Link[\'/Samples\']:    Link.'        + Link['/Samples']);
alert('Link[\'/#Community\']    Link.'      + Link['/#Community']);

Parque infantil

MINATO Azuma
fonte
1
Bom truque, mas você não pode usar essas enum / constantes em uma instrução switch, por exemplo case Link.LEARN:, receberá um Cannot convert 'Link.LEARN' to 'string'erro de compilação. A transmissão não funcionará.
Codificação Gone
@TrueBlueAussie Isso parece funcionar bem para mim executando o TSC 1.0.0.0. Além disso, se por algum motivo você precisar colocar uma constante / variável de string na instrução case, ela funcionará se você a converter em alguma.
CodeAndCats
1
Além disso, graças @ zjc0816, eu pânico amor esta solução :)
CodeAndCats
essa é a solução que eu queria.
Murhaf Sousli 14/03
5
Engraçado, eu me pergunto por que o TypeScript já não suporta apenas enum strings ... Muitas pessoas querem isso (inclusive eu).
Hendy Irawan 22/03
23

TypeScript 2.1 +

Os tipos de pesquisa , introduzidos no TypeScript 2.1, permitem outro padrão para simular enumerações de strings:

// String enums in TypeScript 2.1
const EntityType = {
    Foo: 'Foo' as 'Foo',
    Bar: 'Bar' as 'Bar'
};

function doIt(entity: keyof typeof EntityType) {
    // ...
}

EntityType.Foo          // 'Foo'
doIt(EntityType.Foo);   // 👍
doIt(EntityType.Bar);   // 👍
doIt('Foo');            // 👍
doIt('Bad');            // 🙁 

TypeScript 2.4 +

Com a versão 2.4, o TypeScript introduziu o suporte nativo para enumerações de strings; portanto, a solução acima não é necessária. Dos documentos do TS:

enum Colors {
  Red = "RED",
  Green = "GREEN",
  Blue = "BLUE",
}
Michael Bromley
fonte
Como eu faria isso se o nome da chave enum for diferente do valor da string (porque é muito longo, por exemplo)?
fácil
Deixa pra lá! Resolvido em @ Łukasz-Pniewski 's resposta abaixo stackoverflow.com/a/42820134/1431146
CletusW
O tslint lançará um erro nesse exemplo de String-Enum ao tentar fazer um mapeamento reverso do Enum: Element implicitamente tem um tipo 'any' porque a expressão de índice não é do tipo 'number'. Eu acho que o problema é que, no TS String Enums não pode ser mapeado ao contrário, veja o comentário no exemplo String-Enum em typescriptlang.org/docs/handbook/release-notes/… - Isso parece ser verdade para o TS 2.4, onde O String-Enum foi introduzido, mas também recebo o erro no TS 2.6.2. Exemplo: Colors["RED"]não funcionará. Alguma idéia de como resolver isso (necessário para a conversão JSON).
masi
19

Por que não usar apenas a maneira nativa de acessar as strings de um enum.

enum e {
  WHY,
  NOT,
  USE,
  NATIVE
}

e[e.WHY] // this returns string 'WHY'
Mient-jan Stelling
fonte
2
Esta é a resposta que eu estava procurando, obrigado! As outras soluções são soluções inteligentes, mas isso é tão simples :)
M--
19
Isso não responde à pergunta. A questão não é acessar cadeias de caracteres de uma enumeração. enum Why { Because = "You Can't", Always = "Do Things That Way." };)
James Wilkins
Há problemas ao usar enums valor numérico, como sendo 0 Falsas, mais difícil de depuração etc
robmcm
@robmcm resolvido enum e {WHY = 1, NOT = 2, USE = 3, NATIVE = 4} e [e.WHY] // isso retorna a string 'WHY'
Mient-jan Stelling
16

Você pode usar enumerações de string no TypeScript mais recente:

enum e
{
    hello = <any>"hello",
    world = <any>"world"
};

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


ATUALIZAÇÃO - 2016

Uma maneira um pouco mais robusta de criar um conjunto de strings que eu uso para o React atualmente é assim:

export class Messages
{
    static CouldNotValidateRequest: string = 'There was an error validating the request';
    static PasswordMustNotBeBlank: string = 'Password must not be blank';   
}

import {Messages as msg} from '../core/messages';
console.log(msg.PasswordMustNotBeBlank);
Richard
fonte
1
Esta foi a forma mais concisa, que fez o trabalho para mim ... Pelo menos até que eu possa descobrir como atualizar meu andaimes para compilar com TS 1.8
ThinkBonobo
No entanto, um problema com isso é que <string>e.hellodispara um erro. e.helloainda é considerado como um número pelo compilador. <number>e.hellofunciona embora. Existe alguma maneira de contornar isso? Tudo o que consigo pensar é <string><any>e.hello.
RainingChain
Outra questão é quando o membro enum é igual ao valor enum. Ex:enum Test { a = <any>"b", b = <any>"c", c = <any>"a" } Test.a === 'c'
RainingChain
Eu uso esse método o tempo todo. Rocha do enum da corda. É decepcionante que o compilador não tenha suporte de primeira classe para literais de cadeias, mas possui suporte de segunda classe. O compilador realmente sabe quando você usou o <any> hack, pois ele o impedirá de usá-lo em um arquivo .d.ts - que, para mim, dá legitimidade ao uso desse "hack", pois o compilador está obviamente ciente mas não o impede completamente.
CodeAndCats
Btw, se você quiser comparar um valor de string com um valor de seqüência de enumeração, em vez de lançar a <any>então <string>, basta fazer:someStringValue == someEnumValue.toString()
CodeAndCats
10

Aqui está uma solução bastante limpa que permite herança, usando o TypeScript 2.0. Eu não tentei isso em uma versão anterior.

Bônus: o valor pode ser de qualquer tipo!

export class Enum<T> {
  public constructor(public readonly value: T) {}
  public toString() {
    return this.value.toString();
  }
}

export class PrimaryColor extends Enum<string> {
  public static readonly Red = new Enum('#FF0000');
  public static readonly Green = new Enum('#00FF00');
  public static readonly Blue = new Enum('#0000FF');
}

export class Color extends PrimaryColor {
  public static readonly White = new Enum('#FFFFFF');
  public static readonly Black = new Enum('#000000');
}

// Usage:

console.log(PrimaryColor.Red);
// Output: Enum { value: '#FF0000' }
console.log(Color.Red); // inherited!
// Output: Enum { value: '#FF0000' }
console.log(Color.Red.value); // we have to call .value to get the value.
// Output: #FF0000
console.log(Color.Red.toString()); // toString() works too.
// Output: #FF0000

class Thing {
  color: Color;
}

let thing: Thing = {
  color: Color.Red,
};

switch (thing.color) {
  case Color.Red: // ...
  case Color.White: // ...
}
Westy92
fonte
1
Ótima resposta! Eu estava lutando para criar um objeto semelhante ao Enum com suporte a herança.
DanielM
Um exemplo usando um Enum baseado em classe: goo.gl/SwH4zb (link para o playground do TypeScript).
DanielM
8

Uma maneira hacky para isso é: -

CallStatus.ts

enum Status
{
    PENDING_SCHEDULING,
    SCHEDULED,
    CANCELLED,
    COMPLETED,
    IN_PROGRESS,
    FAILED,
    POSTPONED
}

export = Status

Utils.ts

static getEnumString(enum:any, key:any):string
{
    return enum[enum[key]];
}

Como usar

Utils.getEnumString(Status, Status.COMPLETED); // = "COMPLETED"
nishantkyal
fonte
7

Isso funciona para mim:

class MyClass {
    static MyEnum: { Value1; Value2; Value3; }
    = {
        Value1: "Value1",
        Value2: "Value2",
        Value3: "Value3"
    };
}

ou

module MyModule {
    export var MyEnum: { Value1; Value2; Value3; }
    = {
        Value1: "Value1",
        Value2: "Value2",
        Value3: "Value3"
    };
}

8)

Atualização: Logo após postar isso, descobri outra maneira, mas esqueci de postar uma atualização (no entanto, alguém já mencionou isso acima):

enum MyEnum {
    value1 = <any>"value1 ", 
    value2 = <any>"value2 ", 
    value3 = <any>"value3 " 
}
James Wilkins
fonte
4

Acabei de declarar uma interface e usar uma variável desse tipo para acessar o enum. Manter a interface e a enum em sincronia é realmente fácil, pois o TypeScript reclama se algo muda na enum, assim.

erro TS2345: O argumento do tipo 'typeof EAbFlagEnum' não é atribuível ao parâmetro do tipo 'IAbFlagEnum'. A propriedade 'Move' está ausente no tipo 'typeof EAbFlagEnum'.

A vantagem desse método é que não é necessária a conversão de tipos para usar a enum (interface) em várias situações, e, portanto, há suporte para mais tipos de situações, como o switch / case.

// Declare a TypeScript enum using unique string 
//  (per hack mentioned by zjc0816)

enum EAbFlagEnum {
  None      = <any> "none",
  Select    = <any> "sel",
  Move      = <any> "mov",
  Edit      = <any> "edit",
  Sort      = <any> "sort",
  Clone     = <any> "clone"
}

// Create an interface that shadows the enum
//   and asserts that members are a type of any

interface IAbFlagEnum {
    None:   any;
    Select: any;
    Move:   any;
    Edit:   any;
    Sort:   any;
    Clone:  any;
}

// Export a variable of type interface that points to the enum

export var AbFlagEnum: IAbFlagEnum = EAbFlagEnum;

Usar a variável, em vez da enumeração, produz os resultados desejados.

var strVal: string = AbFlagEnum.Edit;

switch (strVal) {
  case AbFlagEnum.Edit:
    break;
  case AbFlagEnum.Move:
    break;
  case AbFlagEnum.Clone
}

Os sinalizadores eram outra necessidade para mim, então criei um módulo NPM que adiciona a este exemplo e inclui testes.

https://github.com/djabraham/ts-enum-tools

djabraham
fonte
Esta é a única resposta que encontrei que permite misturar definições com importações. Agradável! Você pode usar em export default EAbFlagEnum as IAbFlagEnum;vez de declarar novamente uma variável. Também removi o <any>elenco no enum, funciona bem.
Guillaume F.
4

ATUALIZAÇÃO: TypeScript 3.4

Você pode simplesmente usar as const:

const AwesomeType = {
   Foo: "foo",
   Bar: "bar"
} as const;

TypeScript 2.1

Isso também pode ser feito dessa maneira. Espero que ajude alguém.

const AwesomeType = {
    Foo: "foo" as "foo",
    Bar: "bar" as "bar"
};

type AwesomeType = (typeof AwesomeType)[keyof typeof AwesomeType];

console.log(AwesomeType.Bar); // returns bar
console.log(AwesomeType.Foo); // returns foo

function doSth(awesometype: AwesomeType) {
    console.log(awesometype);
}

doSth("foo") // return foo
doSth("bar") // returns bar
doSth(AwesomeType.Bar) // returns bar
doSth(AwesomeType.Foo) // returns foo
doSth('error') // does not compile
Łukasz Pniewski
fonte
Isso é exatamente o que eu precisava! Ele suporta que o nome da chave seja diferente do valor da string, como você mostrou com sua diferença maiúscula / minúscula. Obrigado!
precisa saber é o seguinte
2

Com os transformadores personalizados ( https://github.com/Microsoft/TypeScript/pull/13940 ), disponíveis em typescript @ next, você pode criar enum como objeto com valores de string de tipos literais de string.

Por favor, olhe para o meu pacote npm, ts-transformer-enumerate .

Exemplo de uso:

// The signature of `enumerate` here is `function enumerate<T extends string>(): { [K in T]: K };`
import { enumerate } from 'ts-transformer-enumerate';

type Colors = 'green' | 'yellow' | 'red';
const Colors = enumerate<Colors>();

console.log(Colors.green); // 'green'
console.log(Colors.yellow); // 'yellow'
console.log(Colors.red); // 'red'
kimamula
fonte
2

TypeScript <2.4

/** Utility function to create a K:V from a list of strings */
function strEnum<T extends string>(o: Array<T>): {[K in T]: K} {
  return o.reduce((res, key) => {
    res[key] = key;
    return res;
  }, Object.create(null));
}

/**
  * Sample create a string enum
  */

/** Create a K:V */
const Direction = strEnum([
  'North',
  'South',
  'East',
  'West'
])
/** Create a Type */
type Direction = keyof typeof Direction;

/** 
  * Sample using a string enum
  */
let sample: Direction;

sample = Direction.North; // Okay
sample = 'North'; // Okay
sample = 'AnythingElse'; // ERROR!

de https://basarat.gitbooks.io/typescript/docs/types/literal-types.html

Para o link de origem, você pode encontrar maneiras mais fáceis de realizar o tipo literal de string

Panagiotis Koursaris
fonte
2

Existem muitas respostas, mas não vejo soluções completas. O problema com a resposta aceita, além disso enum { this, one }, é que ela dispersa o valor da string que você está usando por meio de muitos arquivos. Também não gosto muito da "atualização", é complexa e não utiliza tipos também. Eu acho que a resposta de Michael Bromley é a mais correta, mas sua interface é um pouco complicada e poderia fazer com um tipo.

Estou usando o TypeScript 2.0. * Aqui está o que eu faria

export type Greeting = "hello" | "world";
export const Greeting : { hello: Greeting , world: Greeting } = {
    hello: "hello",
    world: "world"
};

let greet: Greeting = Greeting.hello

Ele também possui informações muito mais agradáveis ​​sobre o tipo / passar o mouse ao usar um IDE útil. A desvantagem é que você deve escrever as cordas duas vezes, mas pelo menos é apenas em dois lugares.

Nathan Cooper
fonte
1

A resposta do @ basarat foi ótima. Aqui está simplificado, mas um exemplo um pouco mais extenso você pode usar:

export type TMyEnumType = 'value1'|'value2';

export class MyEnumType {
    static VALUE1: TMyEnumType = 'value1';
    static VALUE2: TMyEnumType = 'value2';
}

console.log(MyEnumType.VALUE1); // 'value1'

const variable = MyEnumType.VALUE2; // it has the string value 'value2'

switch (variable) {
    case MyEnumType.VALUE1:
        // code...

    case MyEnumType.VALUE2:
        // code...
}
Manuel Fodor
fonte
1

Enfrentou esse problema recentemente com o TypeScript 1.0.1 e resolveu da seguinte maneira:

enum IEvents {
        /** A click on a product or product link for one or more products. */
        CLICK,
        /** A view of product details. */
        DETAIL,
        /** Adding one or more products to a shopping cart. */
        ADD,
        /** Remove one or more products from a shopping cart. */
        REMOVE,
        /** Initiating the checkout process for one or more products. */
        CHECKOUT,
        /** Sending the option value for a given checkout step. */
        CHECKOUT_OPTION,
        /** The sale of one or more products. */
        PURCHASE,
        /** The refund of one or more products. */
        REFUND,
        /** A click on an internal promotion. */
        PROMO_CLICK
}

var Events = [
        'click',
        'detail',
        'add',
        'remove',
        'checkout',
        'checkout_option',
        'purchase',
        'refund',
        'promo_click'
];

function stuff(event: IEvents):boolean {
        // event can now be only IEvents constants
        Events[event]; // event is actually a number that matches the index of the array
}
// stuff('click') won't work, it needs to be called using stuff(IEvents.CLICK)
pocesar
fonte
0

Eu acho que você deveria tentar com isso, neste caso o valor da variável não será alterado e funciona como enumerações. Usar como uma classe também funciona. A única desvantagem é que, por engano, você pode alterar o valor da variável estática e é isso que nós não queremos enums.

namespace portal {

export namespace storageNames {

    export const appRegistration = 'appRegistration';
    export const accessToken = 'access_token';

  }
}
Pranay Dutta
fonte
0
export enum PaymentType {
                Cash = 1,
                Credit = 2
            }
var paymentType = PaymentType[PaymentType.Cash];
Evon Dos
fonte
0
//to access the enum with its string value you can convert it to object 
//then you can convert enum to object with proberty 
//for Example :

enum days { "one" =3, "tow", "Three" }

let _days: any = days;

if (_days.one == days.one)
{ 
    alert(_days.one + ' | ' + _days[4]);
}
Mohammed Rashed Ali
fonte
0

Pouco js-hacky, mas funciona: e[String(e.hello)]

Majid Mallis
fonte
0

Se o que você deseja é principalmente depuração fácil (com verificação de tipo razoável) e não precisa especificar valores especiais para a enumeração, é isso que estou fazendo:

export type Enum = { [index: number]: string } & { [key: string]: number } | Object;

/**
 * inplace update
 * */
export function enum_only_string<E extends Enum>(e: E) {
  Object.keys(e)
    .filter(i => Number.isFinite(+i))
    .forEach(i => {
      const s = e[i];
      e[s] = s;
      delete e[i];
    });
}

enum AuthType {
  phone, email, sms, password
}
enum_only_string(AuthType);

Se você deseja oferecer suporte ao armazenamento de dados / código herdado, mantenha as chaves numéricas.

Dessa forma, você pode evitar digitar os valores duas vezes.

Beeno Tung
fonte
0

Enum muito, muito, muito simples, com string (TypeScript 2.4)

import * from '../mylib'

export enum MESSAGES {
    ERROR_CHART_UNKNOWN,
    ERROR_2
}

export class Messages {
    public static get(id : MESSAGES){
        let message = ""
        switch (id) {
            case MESSAGES.ERROR_CHART_UNKNOWN :
                message = "The chart does not exist."
                break;
            case MESSAGES.ERROR_2 :
                message = "example."
                break;
        }
        return message
    }
}

function log(messageName:MESSAGES){
    console.log(Messages.get(messageName))
}
Karima Rafes
fonte
0

Eu tentei no TypeScript 1.5 como abaixo e funcionou para mim

module App.Constants {
   export enum e{
        Hello= ("Hello") as any,
World= ("World") as any
    }
}
Code-EZ
fonte
0

Eu estava procurando uma maneira de implementar descrições em enumerações datilografadas (v2.5) e esse padrão funcionou para mim:

export enum PriceTypes {
    Undefined = 0,
    UndefinedDescription = 'Undefined' as any,
    UserEntered = 1,
    UserEnteredDescription = 'User Entered' as any,
    GeneratedFromTrade = 2,
    GeneratedFromTradeDescription = 'Generated From Trade' as any,
    GeneratedFromFreeze = 3,
    GeneratedFromFreezeDescription = 'Generated Rom Freeze' as any
}

...

    GetDescription(e: any, id: number): string {
        return e[e[id].toString() + "Description"];
    }
    getPriceTypeDescription(price: IPricePoint): string {
        return this.GetDescription(PriceTypes, price.priceType);
    }
Sonic Soul
fonte
-1

TypeScript 0.9.0.1

enum e{
    hello = 1,
    somestr = 'world'
};

alert(e[1] + ' ' + e.somestr);

Parque infantil TypeScript

Sylvia Plath
fonte
O JavaScript resultando funciona, mas isso produz um erro do compilador: Cannot convert 'string' to 'e'..
23413 Sam