当前位置: 首页 > 知识库问答 >
问题:

将字符串转换为打字稿枚举的通用函数

魏冷勋
2023-03-14

我找到了这个关于如何将字符串转换为打字稿枚举的好答案。在此基础上,我编写了这个函数

enum Color { Red='red', Green='green' }

function mapColorString(strColor: string): Color {
  const colorKey = strColor as keyof typeof Color
  return Color[colorKey]
}

但是现在当我尝试使它通用时,

function getEnumFromString<T>(str: string): T {
  const enumKey = str as keyof T
  return T[enumKey]
}

我在return语句中得到错误:< code >“T”只引用一个类型,但在这里被用作值。

我想使这个泛型,因为我有许多枚举需要根据它们的字符串值生成,并且我不想为每个枚举使用单独的方法。

共有3个答案

呼延鸿畅
2023-03-14

这个解决方案似乎对我很有效:

  /**
   * Converts a string value to an enum entry
   * @param obj the enum class
   * @param str string to convert
   * @return enum value or undefined
   */
  static stringToEnum<T>(obj: T, str: string) : T[keyof T]
  {
    return Object.values(obj).includes(str as keyof T) ? str as unknown as T[keyof T] : undefined;
  }

使用本机铸造的不同实现,通过未知感觉不稳定。

卢磊
2023-03-14

T 只是枚举的类型。类型将被擦除,并且在运行时不存在。您需要传入表示枚举的对象:

enum Color { Red='red', Green='green' }

function getEnumFromString<T, K extends string>(enumObj: { [P in K]: T },str: string): T {
    const enumKey = str as K
    return enumObj[enumKey]
}
getEnumFromString(Color, 'Red');

K将表示枚举的键,T将是枚举值的类型

袁枫涟
2023-03-14

当我传递枚举定义时,我可以实现这一点:

enum Color { Red='red', Green='green' }

function getEnumFromString<T>(type: T, str: string): T[keyof T] {
    const casted = str as keyof T;
    return type[casted];
}

const bar = getEnumFromString(Color, 'Red');
 类似资料:
  • 我想用Typescript写这样的东西: 并按如下方式使用: 它会返回的地方 上面的函数按预期工作…但是输入抛出错误。对于

  • 本文向大家介绍Java将枚举转换为字符串,包括了Java将枚举转换为字符串的使用技巧和注意事项,需要的朋友参考一下 示例 有时您想将枚举转换为String,有两种方法可以实现。 假设我们有: 那么,我们如何将类似的东西转换Fruit.APPLE为"APPLE"? 使用转换 name() name()是一个内部方法,enum该方法返回String枚举的表示形式,返回值精确String表示枚举值的定义

  • 问题内容: 目前,我们的代码存在一种情况,即我们在Java层中使用枚举,该枚举通过以下构造函数存储id和“显示值”: 我们希望打字稿中的某些内容能够与之匹配,以便以有意义的方式显示状态以执行逻辑并在前端向用户显示值。这可能吗?有没有更好的方法来解决这个问题?我们希望避免使用诸如status.id()= 1或status.name()=’Active’这样的逻辑,从而推动枚举。 谢谢 问题答案: T

  • 我有一个typescript中的枚举,它有20个字段。我有一个UI应用程序,用户可以将信息放在一些自由文本中(例如,让我们说用户喜欢的颜色)。我的要求是获取这些颜色信息并致电中层服务。midtier服务将Color定义为Enum,与UI枚举定义保持同步。我需要将用户输入文本转换为枚举(在前端),因为在构建过程中会引发编译问题。我没有找到执行转换的方法(例如,从用户输入字符串到特定枚举元素)。任何指

  • 我有一个枚举文件,在其中我为PaymentTypes定义了一个对象: 这样我就有了可以使用的东西:

  • 我正在尝试将Typecript枚举值转换为数字,以便在我的下拉列表中显示枚举字符串值,但在提交按钮上,传递的是该值而不是字符串。枚举设置如下。 到目前为止,我已经能够控制台.log对象的键(字符串)(例如 Value),但我想做的是在发出对象后传递 0(数字)值。 我该怎么做?