¿Cómo convierto una cadena a enumeración en TypeScript?
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?
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];
A partir de Typecript 2.1, las claves de cadena en las enumeraciones están fuertemente tipadas. keyof typeof
se 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
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;