¿Cómo convierto una cadena a enumeración en TypeScript?

Resuelto Amitabh asked hace 11 años • 31 respuestas

He definido la siguiente enumeración en TypeScript:

enum Color{
    Red, Green
}

Ahora en mi función recibo el color como una cadena. He probado el siguiente código:

var green= "Green";
var color : Color = <Color>green; // Error: can't convert string to enum

¿Cómo puedo convertir ese valor en una enumeración?

Amitabh avatar Jun 29 '13 20:06 Amitabh
Aceptado

Las enumeraciones en TypeScript 0.9 se basan en cadenas + números. No debería necesitar aserción de tipo para conversiones simples:

enum Color{
    Red, Green
}

// To String
 var green: string = Color[Color.Green];

// To Enum / number
var color : Color = Color[green];

Pruébalo en línea

Tengo documentación sobre este y otros patrones de Enum en mi libro OSS: https://basarat.gitbook.io/typescript/type-system/enums

Asegúrate de usar esto si estás usando el indicador mecanografiado --noImplicitAny:

var color : Color = Color[green as keyof typeof Color];
basarat avatar Jun 29 '2013 14:06 basarat

A partir de Typecript 2.1, las claves de cadena en las enumeraciones están fuertemente tipadas. keyof typeofse utiliza para obtener información sobre las claves de cadena disponibles ( 1 ):

enum Color{
    Red, Green
}

let typedColor: Color = Color.Green;
let typedColorString: keyof typeof Color = "Green";

// Error "Black is not assignable ..." (indexing using Color["Black"] will return undefined runtime)
typedColorString = "Black";

// Error "Type 'string' is not assignable ..." (indexing works runtime)
let letColorString = "Red";
typedColorString = letColorString;

// Works fine
typedColorString = "Red";

// Works fine
const constColorString = "Red";
typedColorString = constColorString

// Works fine (thanks @SergeyT)
let letColorString = "Red";
typedColorString = letColorString as keyof typeof Color;

typedColor = Color[typedColorString];

https://www.typescriptlang.org/docs/handbook/advanced-types.html#index-types

Victor avatar Mar 06 '2017 11:03 Victor

Si proporciona valores de cadena a su enumeración, una conversión directa funciona bien.

enum Color {
  Green = "Green",
  Red = "Red"
}

const color = "Green";
const colorEnum = color as Color;
alexania avatar Nov 30 '2019 13:11 alexania