Typescript 使用泛型将字符串转换为枚举

Typescript 使用泛型将字符串转换为枚举,typescript,typescript3.0,ecmascript-2017,Typescript,Typescript3.0,Ecmascript 2017,如何在TypeScript中使用泛型将字符串转换为枚举 export function getMethodEnum<T>(actionStr: string): T { return actionStr as T; // does not work } export enum ActionEnum { Unknown = 0, Sleep = 1, Run } let action: ActionEnum = getMethodEnum<Ac

如何在TypeScript中使用泛型将字符串转换为枚举

export function getMethodEnum<T>(actionStr: string): T
{
    return actionStr as T; // does not work
}

export enum ActionEnum {
    Unknown = 0,
    Sleep = 1,
    Run
}

let action: ActionEnum = getMethodEnum<ActionEnum>()
导出函数getMethodEnum(actionStr:string):T
{
将actionStr返回为T;//不起作用
}
导出枚举操作枚举{
未知=0,
睡眠=1,
跑
}
让操作:ActionEnum=getMethodEnum()

您需要将实际的枚举对象发送到函数,因为您希望将枚举的字符串名称映射到值。此关系存储在枚举对象本身中

function getMethodEnum<T>(enumObject: T, actionStr: string): T[keyof T]
{
    return enumObject[actionStr as keyof T];
}

enum ActionEnum {
    Unknown = 0,
    Sleep = 1,
    Run
}

let action: ActionEnum = getMethodEnum(ActionEnum, "Sleep");
函数getMethodEnum(enumObject:T,actionStr:string):T[keyof T] { 返回enumObject[actionStr作为keyof T]; } 枚举操作枚举{ 未知=0, 睡眠=1, 跑 } let action:ActionEnum=getMethodEnum(ActionEnum,“睡眠”);
您需要将实际的枚举对象发送到函数,因为您希望将枚举的字符串名称映射到值。此关系存储在枚举对象本身中

function getMethodEnum<T>(enumObject: T, actionStr: string): T[keyof T]
{
    return enumObject[actionStr as keyof T];
}

enum ActionEnum {
    Unknown = 0,
    Sleep = 1,
    Run
}

let action: ActionEnum = getMethodEnum(ActionEnum, "Sleep");
函数getMethodEnum(enumObject:T,actionStr:string):T[keyof T] { 返回enumObject[actionStr作为keyof T]; } 枚举操作枚举{ 未知=0, 睡眠=1, 跑 } let action:ActionEnum=getMethodEnum(ActionEnum,“睡眠”);
谁是
methodStr
内部
getMethodEnum
?@TitianCernicova Dragomir修复了抱歉。谁是
methodStr
内部
getMethodEnum
?@TitianCernicova Dragomir修复了抱歉。可以通过将
actionStr
限制为
keyof T
来改进@阿列克塞尔。你是对的,你指出这一点很好,我考虑过包括这个选项,但OP似乎想将随机
字符串
转换为枚举。是的,你是对的。对于随机字符串转换,这样做没有意义restriction@TitianCernicova-德拉戈米尔,你是个救生员!不用于此,但您的代码激发了我的另一个灵感purpose@GôTô乐于帮助:)可以通过将
actionStr
限制为
keyof T
来改进@阿列克塞尔。你是对的,你指出这一点很好,我考虑过包括这个选项,但OP似乎想将随机
字符串
转换为枚举。是的,你是对的。对于随机字符串转换,这样做没有意义restriction@TitianCernicova-德拉戈米尔,你是个救生员!不用于此,但您的代码激发了我的另一个灵感purpose@GôTô乐意帮忙:)