创建带有显示值的 TypeScript 枚举

4im*_*ble 5 enums typescript

我有一个打字稿枚举,如下所示:

enum State {
    NotRequired,
    Working,
    PendingReview,
    Reviewed,
    Done
}
Run Code Online (Sandbox Code Playgroud)

这会产生这样的结果:

var State;
(function (State) {
    State[State["NotRequired"] = 0] = "NotRequired";
    State[State["Working"] = 1] = "Working";
    State[State["PendingReview"] = 2] = "PendingReview";
    State[State["Reviewed"] = 3] = "Reviewed";
    State[State["Done"] = 4] = "Done";
})(State || (State = {}));
Run Code Online (Sandbox Code Playgroud)

我希望这些值是一个格式良好的字符串,并在需要时添加空格。

所以State[State["PendingReview"] = 2] = "PendingReview";会变成State[State["PendingReview"] = 2] = "Pending Review";

我已经通过像这样定义我的枚举来实现接近此的目标:

enum State {
    "Not Required",
    Working,
    "Pending Review",
    Reviewed,
    Done
}
Run Code Online (Sandbox Code Playgroud)

然而,这有一个缺点,要在代码中使用带有空格的任何枚举值,我现在必须使用我的密钥。

所以State.PendingReview现在必须这样使用State["Pending Review"]

我可以通过以某种方式定义我的密钥的替代显示字符串来获得两全其美吗?

所以当我说它State[State.PendingReview]给了我价值"Pending Review"

jeo*_*vre 1

由于枚举不支持字符串值,因此最好使用具有此类静态字段的类。

您可以进行编译检查,就像如果您使用枚举一样,您也可以在代码中以相同的方式调用它。

module rizze.tests {


enum State{
     NotRequiered,
     Working,
     Pending,
     Reviewed,
     Done
}

class StateConvert {
    static NotRequiered="Not Required";
    static Working="I'm Working";
    static Pending = "Pending Review";
    static Reviewed="Reviewed Done";
    static Done="Done All";

    static convert(state:State):String{
        if( state == null) return null;
        switch(state){
            case State.NotRequiered:{return StateConvert.NotRequiered;}
            case State.Working:{return StateConvert.Working;}
            case State.Pending:{return StateConvert.Pending;}
            case State.Reviewed:{return StateConvert.Reviewed;}
            case State.Done:{return StateConvert.Done;}

        }
          console.log("Error state  undefined + " +state );
          return null;  

    }
}





 export class StateTest {

      constructor(){
         let state:State = State.Reviewed;
         console.log("state:"+state + " / " + StateConvert.convert(state));   

      }

  }

//TEST
let s:StateTest= new StateTest();
Run Code Online (Sandbox Code Playgroud)

}