在打字稿中映射枚举

Gue*_*lla 4 typescript

在打字稿中映射枚举的正确方法是什么?

例如,我正在使用在线打字稿代码编辑器,这很好用:

class Message
{
    name: string;
    min: number;
    max: number;
    messageType: MessageType;
}

enum MessageType
{
    none,
    email,
    sms

}

var jsonObj = {
    "name": "some name",
    "min": 0,
    "max": 10,
    "messageType": MessageType.email

}

var messageInstance: Message = <Message>jsonObj;

console.log(messageInstance);
Run Code Online (Sandbox Code Playgroud)

但是,MessageType.email如果我在 json 文件中使用它,则在我的 IDE 中会显示“预期值”错误。

如果我尝试:

"messageType": "MessageType.email"
Run Code Online (Sandbox Code Playgroud)

在在线代码编辑器中,这会产生一个错误。

我才刚刚开始,找不到任何关于如何完成的明确说明。

编辑:

我刚刚意识到枚举是基于数字的,"messageType": 2或者任何相应的数字都是正确的方法。

有什么方法可以使 json 文件中的枚举可读(即像 MessageType.email 这样的值),因为单独查看时,json 文件没有枚举定义,因此可能会令人困惑,所以我宁愿这样做如果可能的话..

Ste*_*ett 5

对于 TypeScript 2.4+:

您可以使用字符串枚举而不是数字枚举:

enum MessageType
{
    none = "none",
    email = "email",
    sms = "sms"
}
Run Code Online (Sandbox Code Playgroud)

对于旧版本的 TypeScript:

您可以使用的索引器将enum值转换为 a :stringenum

const messageTypeAsString = MessageType[MessageType.email];
Run Code Online (Sandbox Code Playgroud)

走另一条路也行:

const messageType: MessageType = MessageType[messageTypeAsString];
Run Code Online (Sandbox Code Playgroud)

据我所知,在序列化/反序列化 JSON 时没有办法自动进行这种转换。

另一种选择是enum完全跳过并使用 staticstring代替:

class MessageType {
    static readonly none = 'none';
    static readonly email = 'email';
    static readonly sms = 'sms';
}
type MessageTypeValue = 'none' | 'email' | 'sms'; 

const messageType: MessageTypeValue = MessageType.none;
Run Code Online (Sandbox Code Playgroud)