打字稿中的字符串枚举

时间:2017-01-24 05:05:52

标签: javascript typescript enums

我想在typescript中有一组字符串枚举,所以我可以做一些事情,比如让用户从一组预定义的选项中进行选择。

我在这个答案中找到了一个很好的解决方案:How to convert string to enum in TypeScript?

但是,这仅适用于单个单词...(基本上,上面的内容允许您获取枚举名称值 - 并且其中不能包含空格。)

所以,进一步观察,我发现这个人有一个解决方法:Workaround for string based enums in typescript

这将允许这样的事情发挥作用:

cats

唯一的回应基本上是这样做是不安全的。 (但我应该说,它可以工作 - 我可以输入EventType。 dot ...而Atom编辑器给我5个驼峰式选项供选择(在代码中保持一致)我然后可以使用它来使字符串值吐出来为我的用户提供良好的空间体验,将来我可以更改枚举和不同的语言/选项措辞,而不会弄乱'代码' at所有等...

有更好的方法吗?我不愿意这样做不安全' - 但我不知道其他任何方式。

2 个答案:

答案 0 :(得分:5)

TypeScript枚举是基于数字的。您可以使用带有联合类型的字符串文字来模拟基于字符串的枚举,如下面的CardinalDirection示例所示。

type CardinalDirection =
    "North"
    | "East"
    | "South"
    | "West";

function move(distance: number, direction: CardinalDirection) {
    // ...
}

move(1,"North"); // Okay
move(1,"Nurth"); // Error!

这里有更多: https://basarat.gitbooks.io/typescript/content/docs/types/literal-types.html

字符串枚举正在进行中 https://github.com/Microsoft/TypeScript/issues/3192

答案 1 :(得分:-1)

您还有其他选项,如Reverse-Mapping for String Enums

中所述

以下是一个例子:

type EventType = "Photoshoot" | "Booking Meeting" | "Post Shoot Meeting" | "Purchase" | "Print";
const EventType {
    get Photoshoot(): EventType { return "Photoshoot"; },
    get BookingMeeting(): EventType { return "Booking Meeting"; },
    get PostShootMeeting(): EventType { return "Post Shoot Meeting"; },
    get Purchase(): EventType { return "Purchase"; },
    get Print(): EventType { return "Print"; }
}