tib*_*ibi 3 enums typescript jhipster
我有一个 jhipster 项目,他们只是从中偶然得到了枚举:
export enum DeclarationStatus {
NEW = 'NEW',
DRAFT = 'DRAFT',
APPROVED_BY_FREELANCER = 'APPROVED_BY_FREELANCER',
APPROVED_BY_CLIENT = 'APPROVED_BY_CLIENT',
APPROVED = 'APPROVED'
}
Run Code Online (Sandbox Code Playgroud)
对此:
export enum DeclarationStatus {
NEW,
DRAFT,
APPROVED_BY_FREELANCER,
APPROVED_BY_CLIENT,
APPROVED
}
Run Code Online (Sandbox Code Playgroud)
首先我可以做这样的比较:
status === DeclarationStatus.APPROVED_BY_FREELANCER;
Run Code Online (Sandbox Code Playgroud)
但现在这不再起作用了,因为枚举实际上是一个数字。这确实有效:
DeclarationStatus[''+status] === DeclarationStatus.APPROVED_BY_FREELANCER;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是哪个更好。或者还有第三种选择吗?
我设置这个问题来回答。Jhipster 社区将更改恢复为已初始化。那么比较又很容易了。
感谢@vicpermir 使这一切成为现实。
这里的问题是字符串枚举未初始化。只要您的枚举未定义,const您就可以与旧方法进行非常相似的比较。
status === DeclarationStatus[DeclarationStatus.APPROVED_BY_FREELANCER];
Run Code Online (Sandbox Code Playgroud)
换句话说,以下内容应该有效:
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 :)
Run Code Online (Sandbox Code Playgroud)
在JHipster Generator的官方 github 存储库中,有一个最近合并的拉取请求 ( PR#11218 ),它修复了 React 的这个问题,并强制生成器始终初始化字符串枚举。
请记住,如JDL 文档中所述,您还可以强制进行此初始化:
enum DeclarationStatus {
NEW (NEW),
DRAFT (DRAFT)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7265 次 |
| 最近记录: |