typescript中的映射枚举

typescript中的映射枚举,typescript,Typescript,在typescript中映射枚举的正确方法是什么 例如,我正在玩一个在线typescript代码编辑器,它工作得很好: class Message { name: string; min: number; max: number; messageType: MessageType; } enum MessageType { none, email, sms } var jsonObj = { "name": "some nam

在typescript中映射枚举的正确方法是什么

例如,我正在玩一个在线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);
在联机代码编辑器中,则会生成错误

我只是刚刚开始,找不到任何关于如何做到这一点的明确指示

编辑:

我刚刚意识到枚举是基于数字的,所以
“messageType”:2
或任何相应的数字都是正确的方法


当单独查看json文件时,是否有任何方法使枚举在json文件中可读(例如,作为值的MessageType.email),因为json文件没有枚举定义,因此可能会混淆,因此如果可能,我宁愿这样做。

对于TypeScript 2.4+:

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

enum MessageType
{
    none = "none",
    email = "email",
    sms = "sms"
}
对于较旧版本的TypeScript:

您可以使用
枚举
的索引器将
枚举
值转换为
字符串

const messageTypeAsString = MessageType[MessageType.email];
走另一条路也行:

const messageType: MessageType = MessageType[messageTypeAsString];
据我所知,在序列化/反序列化JSON时,没有办法自动进行这种转换

另一个选项是完全跳过
enum
,而是使用静态
string
s:

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

const messageType: MessageTypeValue = MessageType.none;

谢谢我不熟悉这种语法:
type MessageTypeValue='none'|'email'|'sms'这叫什么?它是一个。它创建一个名为
MessageTypeValue
的类型,该类型相当于联合类型
“none”|“email”|“sms”
class MessageType {
    static readonly none = 'none';
    static readonly email = 'email';
    static readonly sms = 'sms';
}
type MessageTypeValue = 'none' | 'email' | 'sms'; 

const messageType: MessageTypeValue = MessageType.none;