我在TypeScript中定义了以下enum:
enum Color{
Red, Green
}
现在在我的函数中,我以字符串的形式接收颜色。我尝试了以下代码:
var green= "Green";
var color : Color = <Color>green; // Error: can't convert string to enum
如何将该值转换为enum?
我在TypeScript中定义了以下enum:
enum Color{
Red, Green
}
现在在我的函数中,我以字符串的形式接收颜色。我尝试了以下代码:
var green= "Green";
var color : Color = <Color>green; // Error: can't convert string to enum
如何将该值转换为enum?
当前回答
Typescript 3.9提案
enum Color{ RED, GREEN }
const color = 'RED' as Color;
容易peasy……柠檬捏的!
其他回答
试试这个
var color: color =(任何颜色)["绿色];
这对于3.5.3版本来说很好
我得到了它的工作使用以下代码。
var green= "Green";
var color : Color= <Color>Color[green];
打印稿1.倍
如果你确定输入字符串与Color enum完全匹配,那么使用:
const color: Color = (<any>Color)["Red"];
在输入字符串可能不匹配Enum的情况下,使用:
const mayBeColor: Color | undefined = (<any>Color)["WrongInput"];
if (mayBeColor !== undefined){
// TypeScript will understand that mayBeColor is of type Color here
}
操场上
如果我们没有将enum转换为<任意>类型,那么TypeScript将显示错误:
元素隐式具有“any”类型,因为索引表达式不是类型“number”。
这意味着默认情况下,TypeScript Enum类型与数字索引一起工作。 let c = Color[0],但是没有像let c = Color["string"]这样的字符串索引。这是微软团队针对更一般问题对象字符串索引的一个已知限制。
2.打印稿x-4x
TypeScript移动到typeof概念的键。
如果some使用字符串值enum:
enum Color {
Green = "GRN",
Red = "RD"
}
然后有语言解决方案映射键值(颜色。Green -> "GRN")只是通过访问枚举成员,但没有简单的方法来做相反的事情("GRN" -> Color.Green)。通过使用反向映射:
请记住,字符串enum成员不会得到反向映射 根本就不存在。
一种可能的解决方案是手动检查值并将值强制转换为enum。请注意,它只适用于字符串枚举。
function enumFromStringValue<T> (enm: { [s: string]: T}, value: string): T | undefined {
return (Object.values(enm) as unknown as string[]).includes(value)
? value as unknown as T
: undefined;
}
enumFromStringValue(Color, "RD"); // Color.Red
enumFromStringValue(Color, "UNKNOWN"); // undefined
enumFromStringValue(Color, "Red"); // undefined
TypeScript 0.9中的枚举是基于字符串+数字的。简单转换不需要类型断言:
enum Color{
Red, Green
}
// To String
var green: string = Color[Color.Green];
// To Enum / number
var color : Color = Color[green];
在网上试试
我在我的OSS书籍https://basarat.gitbook.io/typescript/type-system/enums中有关于这个和其他Enum模式的文档
如果您正在使用名称空间来扩展枚举的功能,那么您还可以这样做
enum Color {
Red, Green
}
export namespace Color {
export function getInstance(color: string) : Color {
if(color == 'Red') {
return Color.Red;
} else if (color == 'Green') {
return Color.Green;
}
}
}
像这样使用它
Color.getInstance('Red');