sir*_*day 6 javascript enums typescript
我想在 Typescript 中写这样的东西:
export function stringToEnum<T>(enumObj: T, str: string): keyof T {
return enumObj[str];
}
Run Code Online (Sandbox Code Playgroud)
并按如下方式使用它:
enum MyEnum {
Foo
}
stringToEnum<MyEnum>(MyEnum, 'Foo');
Run Code Online (Sandbox Code Playgroud)
它将返回的地方
MyEnum.Foo
上面的函数按预期工作......但打字错误。对于参数MyEnum中stringToEnum<MyEnum>(MyEnum, 'Foo');,打字稿抱怨塔:
“typeof MyEnum”类型的参数不可分配给“MyEnum”类型的参数
这是有道理的......不幸的是。关于如何解决这个问题的任何想法?
您可以在本地完成所有操作,而无需编写函数:
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);
Run Code Online (Sandbox Code Playgroud)
或者你可以从中获得一些乐趣......
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');
Run Code Online (Sandbox Code Playgroud)