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

具有多个字符串值的Typescript枚举

  •  0
  • Ruan  · 技术社区  · 7 年前

    我努力找到一种方法来获取enum变量名和显示名的字符串部分(同时使用变量名和字符串“display”名)

    所以我找到了一个方法来创建一个对象作为枚举,我想我只是把它添加到这里。

    2 回复  |  直到 7 年前
        1
  •  7
  •   Ruan    5 年前

    因此,与其创建枚举,不如用这种格式创建一个对象。

    export let RewardCategory = { 
      swapPoints:  {variable: 'swapPoints', display: 'Swap Points' },
      charity: {variable: 'charity', display: 'Charity' },
      discountVouchers: {variable: 'discountVouchers', display: 'Discount Vouchers' }
    }
    

    然后,包括thisEnum布局。

    export interface EnumLayout {
        variable: string;
        display: string;
    }
    

    那么,就这样用吧。

     (<EnumLayout>RewardCategory['swapPoints']).display 
    

     (<EnumLayout>RewardCategory['swapPoints']).variable
    
        2
  •  6
  •   Falk Jäger    5 年前

    您可以使用带有私有构造函数的类,而不是创建接口或枚举。创造 static readonly 类的实例。

    export class RewardCategory {
      public static readonly swapPoints = new RewardCategory('swapPoints', 'Swap Points');
      public static readonly charity = new RewardCategory('charity', 'Charity');
      public static readonly discountVouchers = new RewardCategory('discountVouchers', 'Discount Vouchers');
    
      private constructor(public readonly variable: string, public readonly displayName: string) {
      }
    }
    

    你可以这样使用它:

    RewardCategory.charity.displayName
    

    RewardCategory.charity.variable
    
        3
  •  2
  •   Tom Cumming    7 年前

    枚举被编码为普通javascript对象,因此您可以执行以下操作:

    enum Numbers {
        one = 'number one',
        two = 'the second number'
    }
    
    for (const key in Numbers)
        console.log(`key: ${key}, value: ${Numbers[key]}`);
    
    function getTheKeyFromTheValue(value: string) {
        for (const key in Numbers)
            if (Numbers[key] === value)
                return key;
    
        return undefined; // Couldn't find it
    }