当前位置: 首页 > 面试题库 >

字符串枚举的反向映射

南宫星波
2023-03-14
问题内容

我想在打字稿中使用字符串枚举,但在其中看不到对反向映射的支持。我有一个这样的枚举:

enum Mode {
    Silent = "Silent",
    Normal = "Normal",
    Deleted = "Deleted"
}

我需要这样使用它:

let modeStr: string;
let mode: Mode = Mode[modeStr];

是的,我不知道modeStr字符串中有什么,如果字符串未在枚举定义中显示,我需要将其解析为枚举或在运行时解析失败。我该如何做到整洁呢?提前致谢


问题答案:

我们可以将其Mode设为一个类型,并将值设为同一类型。

type Mode = string;
let Mode = {
    Silent: "Silent",
    Normal: "Normal",
    Deleted: "Deleted"
}

let modeStr: string = "Silent";
let mode: Mode;

mode = Mode[modeStr]; // Silent
mode = Mode.Normal; // Normal
mode = "Deleted"; // Deleted
mode = Mode["unknown"]; // undefined
mode = "invalid"; // "invalid"

更严格的版本:

type Mode = "Silent" | "Normal" | "Deleted";
const Mode = {
    get Silent(): Mode { return "Silent"; },
    get Normal(): Mode { return "Normal"; },
    get Deleted(): Mode { return "Deleted"; }
}

let modeStr: string = "Silent";
let mode: Mode;

mode = Mode[modeStr]; // Silent
mode = Mode.Normal; // Normal
mode = "Deleted"; // Deleted
mode = Mode["unknown"]; // undefined
//mode = "invalid"; // Error

字符串枚举作为此答案:

enum Mode {
    Silent = <any>"Silent",
    Normal = <any>"Normal",
    Deleted = <any>"Deleted"
}

let modeStr: string = "Silent";
let mode: Mode;

mode = Mode[modeStr]; // Silent
mode = Mode.Normal; // Normal
//mode = "Deleted"; // Error
mode = Mode["unknown"]; // undefined


 类似资料:
  • 例如,我如何做类似的事情: 结果示例:

  • 问题内容: 我有一个类别hibernate模型: 其中有一个类型字符串字段。我也有一个Java枚举,它表示类别的类型: 我想用它代替字符串类型。SQL在varchar参数中接受两个不同的值:或。我希望Category模型类接受一个枚举变量- 每当hibernate要求它时,都以某种方式将其映射到字符串。 可能吗? 问题答案: 是的,有可能。它应该是:

  • 我有一个类别Hibernate模型: 它们具有类型字符串字段。另外,我还有一个Java枚举,它表示类别的一种类型:

  • 因此,进一步寻找,我发现这个人有一个解决方案:typescript中基于字符串的枚举的解决方案 这将允许像这样的东西工作: 唯一的回应基本上是说这样做是不安全的。(但我应该说,它确实起作用了--我可以键入eventtype.dot...Atom editor给了我5个大小写选项可供选择(保持代码中的内容一致),然后我可以使用它将字符串值吐出来,给我的用户一个很好的填充空间的体验,将来我可以更改枚举

  • 问题内容: 我有一个类别休眠模型: 其中有一个类型字符串字段。我也有一个Java枚举,它表示类别的类型: 我想用它代替字符串类型。SQL在varchar参数中接受两个不同的值:或。我希望Category模型类接受一个枚举变量- 并在休眠要求时以某种方式将其映射到字符串。 可能吗? 问题答案: 是的,有可能。它应该是:

  • 我正在使用以下代码来包含枚举值和与之关联的相应字符串。我想知道是否有更简单的方法来实现这一点?