代码之家  ›  专栏  ›  技术社区  ›  Icemanind

为什么typescript蒸腾器将枚举编译成字典查找而不是简单对象?

  •  6
  • Icemanind  · 技术社区  · 7 年前

    我很好奇为什么打字脚本发起者将枚举编译成字典查找而不是简单的对象。下面是typescript枚举示例:

    enum transactionTypesEnum {
        None = 0,
    
        OSI = 4, 
        RSP = 5,
        VSP = 6,
        SDIV = 7,
        CDIV = 8
    }
    

    下面是JS代码类型脚本发出:

    var TransactionTypes;
    (function (TransactionTypes) {
        TransactionTypes[TransactionTypes["None"] = 0] = "None";
        TransactionTypes[TransactionTypes["OSI"] = 4] = "OSI"; 
        TransactionTypes[TransactionTypes["RSP"] = 5] = "RSP"; 
        TransactionTypes[TransactionTypes["VSP"] = 6] = "VSP"; 
        TransactionTypes[TransactionTypes["SDIV"] = 7] = "SDIV";
        TransactionTypes[TransactionTypes["CDIV"] = 8] = "CDIV";
    })(TransactionTypes || (TransactionTypes = {}));
    

    我的好奇心是想知道为什么typescript不简单地做到这一点:

    var TransactionTypes = {
        None: 0,
        OSI: 4,
        RSP: 5,
        VSP: 6,
        SDIV: 7,
        CDIV: 8
    }
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Fenton    7 年前

    打字稿 enum 类型提供了一个安全的双向映射,因此您可以基于以下所有内容获取名称或值(例如,从值中获取值、名称和普通字符串中的值)

    enum Musketeers {
      CAV = 0,
      BAS = 1,
      USR = 2
    }
    
    const selection = Musketeers.BAS;
    
    // 1
    console.log(selection);
    
    const selectionName = Musketeers[selection];
    
    // BAS
    console.log(selectionName);
    
    const fromString = Musketeers['BAS'];
    
    // 1
    console.log(fromString);
    

    特别是,字典不支持此行(不编写附加代码):

    // Gets the name from the value
    const selectionName = Musketeers[1];