我从枚举会派上用场的服务中检索数据。对于可读性而言,数据有些不方便,但我希望枚举更具可读性。
如何从不方便的字符串中实例化枚举值?
export enum Status {
ENROLLED = "a",
PENDING = "asdf",
NOT_ENROLLED = "f"
}
let incoming = "asdf";
let status: Status = ...?
答案 0 :(得分:1)
好吧,如果您不关心安全性(检查incoming
的有效性),您可以断言incoming
的类型为Status
:
let status: Status = incoming as Status;
那是因为Status
是string
的子类型(实际上是字符串文字值"a"|"asdf"|"f"
的子类型)。
如果 关心安全性,您可以先创建一个函数进行检查并返回undefined
,或者如果字符串不是有效Status
则抛出异常:
function toStatus(x: string): Status | undefined {
return (Object.keys(Status).some(k => Status[k as any] === x)) ? x as Status : void 0;
}
let status: Status | undefined = toStatus(incoming);
if (!status) {
// invalid status
console.log("I am sad.");
} else {
// valid status
console.log("I am happy.");
switch (status) {
// ... whatever you want to do here
}
}
希望有所帮助;祝你好运!