在打字稿中映射枚举的正确方法是什么?
例如,我正在玩一个在线打字稿代码编辑器,这很好用:
Rfc2898DeriveBytes
然而,在我的IDE 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);
中显示错误&#34;预期值&#34;如果我在json文件中使用它。
如果我尝试:
MessageType.email
在在线代码编辑器中会产生错误。
我刚刚开始,无法找到有关如何完成此操作的明确说明。
编辑:
我刚刚意识到枚举是基于数字的,因此"messageType": "MessageType.email"
或任何相应的数字都是正确的方法。
有没有办法让json文件中的枚举可读(比如像MessageType.email这样的值),因为单独查看时json文件没有枚举定义所以可能会让人感到困惑,所以我&# 39;如果可能的话,我宁愿这样做..
答案 0 :(得分:4)
对于TypeScript 2.4 +:
您可以使用字符串枚举而不是数字枚举:
enum MessageType
{
none = "none",
email = "email",
sms = "sms"
}
适用于旧版本的TypeScript:
您可以使用enum
的索引器将string
值转换为enum
:
const messageTypeAsString = MessageType[MessageType.email];
走另一条路也是有效的:
const messageType: MessageType = MessageType[messageTypeAsString];
据我所知,在序列化/反序列化JSON时无法自动执行此转换。
另一种选择是完全跳过enum
并改为使用静态string
:
class MessageType {
static readonly none = 'none';
static readonly email = 'email';
static readonly sms = 'sms';
}
type MessageTypeValue = 'none' | 'email' | 'sms';
const messageType: MessageTypeValue = MessageType.none;