【问题标题】:Convert string to enum with generics使用泛型将字符串转换为枚举
【发布时间】:2019-02-27 21:06:51
【问题描述】:

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

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>()

【问题讨论】:

  • methodStr 里面的getMethodEnum 是谁?
  • @TitianCernicova-Dragomir 修复了抱歉。

标签: typescript typescript3.0 ecmascript-2017


【解决方案1】:

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

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");

【讨论】:

  • 可以通过将actionStr 限制为keyof T 来进行一些改进。 Playground
  • @AlekseyL。你是对的,你指出这一点很好,我考虑过包含该选项,但 OP 似乎想将随机的 string 转换为枚举。
  • 是的,你是对的。对于随机字符串转换,这种限制没有意义
  • @TitianCernicova-Dragomir 你是救生员!未用于此目的,但您的代码启发了我另一个目的
  • @GôTô 乐于助人:)
猜你喜欢
  • 1970-01-01
  • 2019-07-14
  • 2010-10-03
  • 1970-01-01
  • 2018-02-14
  • 2020-02-20
  • 1970-01-01
  • 2014-03-18
相关资源
最近更新 更多