在打字稿中映射枚举的正确方法是什么?
例如,我正在使用在线打字稿代码编辑器,这很好用:
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 文件没有枚举定义,因此可能会令人困惑,所以我宁愿这样做如果可能的话..
对于 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)