从神秘值到可读枚举的打字稿

时间:2017-09-20 18:45:32

标签: typescript enums

我从枚举会派上用场的服务中检索数据。对于可读性而言,数据有些不方便,但我希望枚举更具可读性。

如何从不方便的字符串中实例化枚举值?

export enum Status {
     ENROLLED = "a",
     PENDING = "asdf", 
     NOT_ENROLLED = "f"
}

let incoming = "asdf";
let status: Status = ...?

1 个答案:

答案 0 :(得分:1)

好吧,如果您不关心安全性(检查incoming的有效性),您可以断言incoming的类型为Status

let status: Status = incoming as Status; 

那是因为Statusstring的子类型(实际上是字符串文字值"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
  }
}

希望有所帮助;祝你好运!