打字稿枚举的构造函数? [英] Constructor on typescript enum?
问题描述
目前我们的代码中有一个情况,我们在Java层中使用Enums,它使用如下构造函数存储id和'display value':
We have a situation at the moment with our code where we are using Enums in our Java layer which store an id and a 'display value' with a constructor like below:
public enum Status implements EnumIdentity {
Active(1, "Active"),
AwaitingReview(2, "Awaiting Review"),
Closed(3, "Closed"),
Complete(4, "Complete"),
Draft(5, "Draft"),
InProcess(6, "In Process"),
InReview(7, "In Review"),
NotStarted(8, "Not Started"),
PendingResolution(9, "Pending Resolution"),
Rejected(10, "Rejected");
private int id;
private String displayValue;
PlanStatus(final int id, String displayValue) {
this.id = id;
this.displayValue = displayValue;
}
/** {@inheritDoc} */
@Override
public int id() {
return id;
}
public String getDisplayValue() {
return displayValue;
}
}
我们希望打字稿中的内容与此相符允许以有意义的方式显示状态以执行逻辑并在前端向用户显示值。
这可能吗?有没有更好的方法来处理这个?我们希望避免使用诸如status.id()= 1或status.name()='Active'之类的逻辑来推动枚举。
and we would like something in typescript to match this to allow for displaying the status in a meaningful way for carrying out logic and for display the value to the user on the front end. Is this possible? Is there a better way to handle this? We would like to avoid having to use logic such as does status.id() = 1 or status.name() = 'Active' hence for the push towards enums.
谢谢
推荐答案
Typescript不支持扩展枚举,例如java。您可以使用类来实现类似的效果:
Typescript does not support expanded enums such as in java. You can achieve a similar effect using a class:
interface EnumIdentity { }
class Status implements EnumIdentity {
private static AllValues: { [name: string] : Status } = {};
static readonly Active = new Status(1, "Active");
static readonly AwaitingReview = new Status(2, "Awaiting Review");
static readonly Closed = new Status(3, "Closed");
static readonly Complete = new Status(4, "Complete");
static readonly Draft = new Status(5, "Draft");
static readonly InProcess = new Status(6, "In Process");
static readonly InReview = new Status(7, "In Review");
static readonly NotStarted = new Status(8, "Not Started");
static readonly PendingResolution = new Status(9, "Pending Resolution");
static readonly Rejected = new Status(10, "Rejected");
private constructor(public readonly id: number, public readonly displayValue: string) {
Status.AllValues[displayValue] = this;
}
public static parseEnum(data: string) : Status{
return Status.AllValues[data];
}
}
这篇关于打字稿枚举的构造函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!