Reverse-Mapping for String Enums

后端 未结 4 681
星月不相逢
星月不相逢 2020-12-05 23:12

I wanted to use string enums in typescript but I can\'t see a support for reversed mapping in it. I have an enum like this:

enum Mode {
    Silent = \"Silent         


        
4条回答
  •  眼角桃花
    2020-12-06 00:03

    We can make the Mode to be a type and a value at the same type.

    type Mode = string;
    let Mode = {
        Silent: "Silent",
        Normal: "Normal",
        Deleted: "Deleted"
    }
    
    let modeStr: string = "Silent";
    let mode: Mode;
    
    mode = Mode[modeStr]; // Silent
    mode = Mode.Normal; // Normal
    mode = "Deleted"; // Deleted
    mode = Mode["unknown"]; // undefined
    mode = "invalid"; // "invalid"
    

    A more strict version:

    type Mode = "Silent" | "Normal" | "Deleted";
    const Mode = {
        get Silent(): Mode { return "Silent"; },
        get Normal(): Mode { return "Normal"; },
        get Deleted(): Mode { return "Deleted"; }
    }
    
    let modeStr: string = "Silent";
    let mode: Mode;
    
    mode = Mode[modeStr]; // Silent
    mode = Mode.Normal; // Normal
    mode = "Deleted"; // Deleted
    mode = Mode["unknown"]; // undefined
    //mode = "invalid"; // Error
    

    String Enum as this answer:

    enum Mode {
        Silent = "Silent",
        Normal = "Normal",
        Deleted = "Deleted"
    }
    
    let modeStr: string = "Silent";
    let mode: Mode;
    
    mode = Mode[modeStr]; // Silent
    mode = Mode.Normal; // Normal
    //mode = "Deleted"; // Error
    mode = Mode["unknown"]; // undefined
    

提交回复
热议问题