我想用Typescript写这样的东西:
export function stringToEnum<T>(enumObj: T, str: string): keyof T {
return enumObj[str];
}
并按如下方式使用:
enum MyEnum {
Foo
}
stringToEnum<MyEnum>(MyEnum, 'Foo');
它会返回的地方
我的E num. Foo
上面的函数按预期工作…但是输入抛出错误。对于stringToEnum中的参数
MyEnum
类型'typeof MyEnum'的参数不能分配给类型'MyEnum'的参数
这是有道理的...不幸。关于如何解决这个问题的任何想法?
stringToEnum(MyEnum, 'Foo');
只需保留泛型并让打字脚本来完成。这是因为存储在MyEnum下的类型与Enum本身不匹配,而是其值的联合类型:
enum Test { A, B };
const value: Test /* "A" | "B" */ = Test.A;
你的签名有点混乱。如果希望方法返回枚举值,则返回类型应为T[keyofT]
。str
param的类型也应该是键的T
,以防止传入无效字符串,但这将限制您传入字符串文本(或类型为
的类型良好的变量,而不是<code>字符串</code>):
function stringToEnum<T>(enumObj: T, str: keyof T): T[keyof T]
那么要么不指定类型参数,让编译器正确推断类型:
// type: Foo
// value: 0
const result = stringToEnum(MyEnum, 'Foo');
或者你需要提供 MyEnum 的类型
作为类型参数:
// type: Foo
// value: 0
const result = stringToEnum<typeof MyEnum>(MyEnum, 'Foo');
如果您真的希望能够传入任何任意字符串枚举名称,那么返回类型是谎言:应该是T[key of T]|未定义的
。如果str
的类型是string
并且您启用了no的任何
编译器选项,则在尝试enumObj[str]
时也会遇到麻烦。
要使泛型函数正确使用枚举类型,尤其是在运行时具有反向查找项的数值枚举,还有更多的工作要做。查看tsenum-util
(github,npm)的源代码以获得灵感
您可以在本地完成所有操作,而无需编写函数:
enum Color {
red,
green,
blue
}
// Enum to string
const redString: string = Color[Color.red];
alert(redString);
// String to enum
const str = 'red';
const redEnum: Color = Color[str];
alert(redEnum);
或者你可以玩得开心点…
enum MyEnum {
Foo,
Bar
}
function stringToEnum<ET, T>(enumObj: ET, str: keyof ET): T{
return enumObj[<string>str];
}
const val = stringToEnum<typeof MyEnum, MyEnum>(MyEnum, 'Foo');
// Detects that `foo` is a typo
const val2 = stringToEnum<typeof MyEnum, MyEnum>(MyEnum, 'foo');
本文向大家介绍Java将枚举转换为字符串,包括了Java将枚举转换为字符串的使用技巧和注意事项,需要的朋友参考一下 示例 有时您想将枚举转换为String,有两种方法可以实现。 假设我们有: 那么,我们如何将类似的东西转换Fruit.APPLE为"APPLE"? 使用转换 name() name()是一个内部方法,enum该方法返回String枚举的表示形式,返回值精确String表示枚举值的定义
我在TypeScript中定义了以下枚举: 现在在我的函数中,我接收颜色作为字符串。我已经尝试了以下代码: 如何将该值转换为枚举?
我正在尝试将Typecript枚举值转换为数字,以便在我的下拉列表中显示枚举字符串值,但在提交按钮上,传递的是该值而不是字符串。枚举设置如下。 到目前为止,我已经能够控制台.log对象的键(字符串)(例如 Value),但我想做的是在发出对象后传递 0(数字)值。 我该怎么做?
因此,进一步寻找,我发现这个人有一个解决方案:typescript中基于字符串的枚举的解决方案 这将允许像这样的东西工作: 唯一的回应基本上是说这样做是不安全的。(但我应该说,它确实起作用了--我可以键入eventtype.dot...Atom editor给了我5个大小写选项可供选择(保持代码中的内容一致),然后我可以使用它将字符串值吐出来,给我的用户一个很好的填充空间的体验,将来我可以更改枚举
问题内容: 我定义了以下枚举 现在的印刷价值是 相反,我想打印枚举的值 要实现此功能可以做些什么? 问题答案: 您正在打印枚举 对象 。如果只想打印该属性,请使用该属性: 请参阅 对枚举成员及其属性 的 编程访问权限 部分 : 如果您有枚举成员并需要其名称或值: 如果只需要提供自定义字符串表示形式,则可以向枚举添加方法: 演示:
我找到了这个关于如何将字符串转换为打字稿枚举的好答案。在此基础上,我编写了这个函数 但是现在当我尝试使它通用时, 我在return语句中得到错误:< code >“T”只引用一个类型,但在这里被用作值。 我想使这个泛型,因为我有许多枚举需要根据它们的字符串值生成,并且我不想为每个枚举使用单独的方法。