我有一个jhipster项目,他们只是从这个机会中获得了枚举:
export enum DeclarationStatus {
NEW = 'NEW',
DRAFT = 'DRAFT',
APPROVED_BY_FREELANCER = 'APPROVED_BY_FREELANCER',
APPROVED_BY_CLIENT = 'APPROVED_BY_CLIENT',
APPROVED = 'APPROVED'
}
对此:
export enum DeclarationStatus {
NEW,
DRAFT,
APPROVED_BY_FREELANCER,
APPROVED_BY_CLIENT,
APPROVED
}
首先,我可以进行如下比较:
status === DeclarationStatus.APPROVED_BY_FREELANCER;
但是现在不起作用了,因为枚举实际上是一个数字。无论如何,这确实有效:
DeclarationStatus[''+status] === DeclarationStatus.APPROVED_BY_FREELANCER;
所以我的问题是哪个更好。或者甚至还有第三个选择?
我将此问题设置为回答。 Jhipster社区将更改恢复为已初始化。因此,再次比较就容易了。
感谢实现这一目标的@vicpermir。
答案 0 :(得分:4)
这里的问题是字符串枚举未初始化。只要您的枚举未定义为const
,您就可以与旧方法进行非常相似的比较。
status === DeclarationStatus[DeclarationStatus.APPROVED_BY_FREELANCER];
换句话说,以下应该起作用:
enum Initialized {
A = 'A',
B = 'B'
}
enum NotInitialized { // equivalent to
A, // A = 0,
B // B = 1
}
status = 'A';
// String enum initialized
let test1 = (status === Initialized.A); // true
// String enum not initialized
let test2 = (status === NotInitialized.A); // false
let test3 = (status === NotInitialized[NotInitialized.A]); // true :)
在JHipster Generator的官方github仓库中,有一个最近合并的pull请求(PR#11218),该请求为React解决了这个问题,并强制生成器始终初始化字符串枚举。
请记住,如JDL docs中所述,您也可以强制执行此初始化:
enum DeclarationStatus {
NEW (NEW),
DRAFT (DRAFT)
}
有关TypeScript枚举的更多信息,请参见here。