我有一个 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 使这一切成为现实。
最佳答案
这里的问题是字符串枚举没有初始化。只要您的枚举未定义为 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 存储库中最近合并的拉取请求 ( PR#11218 ) 修复了 React 的这个问题,并强制生成器始终初始化字符串枚举。
请记住,如 JDL docs 中所述,您还可以强制进行此初始化:
enum DeclarationStatus {
NEW (NEW),
DRAFT (DRAFT)
}
有关 TypeScript 枚举的更多信息可以找到 here .
关于typescript - 我应该如何在 typescript 中进行枚举比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60415624/