代码之家  ›  专栏  ›  技术社区  ›  Fyodor Yemelyanenko

在javascript中将一个枚举转换为另一个枚举

  •  0
  • Fyodor Yemelyanenko  · 技术社区  · 6 年前

    编辑

    正如注释所示,枚举不是JavaScript的一部分,而是typescript的一部分。我故意留下了原来的头衔,因为人们可能会像我一样犯错误。


    我有两个具有相同键但不同值的枚举。

    enum RowStates {
        editing = 0,
        sentToApproval,
        approved
        // ...
    }
    
    enum RowColors {
        editing = '#ffffff',
        sentToApproval = '#ffffcc',
        approved = '#ccffb3'
        // ...
    }
    

    我还有一些转换的功能:

    function Convert (rowState) {
    // What should be here to return rowColor?
    // Using switch (rowState) is obvious, but may be other solution exist?
    }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Fyodor Yemelyanenko    6 年前

    typescript枚举允许您执行 reverse mapping :

    enum RowStates {
        editing = 0,
        sentToApproval,
        approved
    }
    
    enum RowColors {
        editing = '#ffffff',
        sentToApproval = '#ffffcc',
        approved = '#ccffb3'
    }
    
    function convert(rowState) {
        return RowColors[RowStates[rowState] as keyof typeof RowColors];
    }
    
    console.log(convert(RowStates.sentToApproval)); // prints '#ffffcc'
    
        2
  •  0
  •   Kamil Kiełczewski    6 年前

    尝试

    function Convert (rowState: RowStates): RowColors {
        return RowColors[RowStates[rowState]];
    }
    

    工作示例 here