在打字稿中映射枚举



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

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

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);

但是,在我的IDE MessageType.email中,如果我在JSON文件中使用它,则显示了"预期"的错误。

如果我尝试:

"messageType": "MessageType.email"

在在线代码编辑器中生成错误。

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

编辑:

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

有什么方法可以使枚举在JSON文件中可读(即类似MessageType.Email作为一个值),就像单独查看时,JSON文件没有枚举定义,因此可能会令人困惑,所以我宁愿我宁愿如果可能的话,那样做。

toxpycript 2.4 :

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

enum MessageType
{
    none = "none",
    email = "email",
    sms = "sms"
}

对于旧版本的打字稿:

您可以使用enum的索引将enum值转换为string

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;

最新更新