我应该如何在打字稿中进行枚举比较
How should I do an Enum comparison in typescript
我有一个 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 there is a recently merged pull request (PR#11218 的官方 github 存储库中修复了 React 的这个问题并强制生成器始终初始化字符串枚举。
请记住,如 JDL docs 中所述,您还可以强制进行此初始化:
enum DeclarationStatus {
NEW (NEW),
DRAFT (DRAFT)
}
可以找到有关 TypeScript 枚举的更多信息 here。
我有一个 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 there is a recently merged pull request (PR#11218 的官方 github 存储库中修复了 React 的这个问题并强制生成器始终初始化字符串枚举。
请记住,如 JDL docs 中所述,您还可以强制进行此初始化:
enum DeclarationStatus {
NEW (NEW),
DRAFT (DRAFT)
}
可以找到有关 TypeScript 枚举的更多信息 here。