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

时间:2018-09-06 09:31:20

标签: typescript enums

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

我想要这个是因为我会在过滤查询中使用变量名,并在前端显示名称。

因此,我找到了一种创建对象以充当枚举的方法,并认为id可以在这里为您添加。

3 个答案:

答案 0 :(得分:3)

您可以使用带有私有构造函数的类来代替创建接口或枚举。并创建您的类的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

答案 1 :(得分:0)

因此,无需创建枚举,只需创建此格式的对象即可。

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

然后,包含此枚举布局。

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

然后,像这样简单地使用它。

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

 (<EnumLayout>RewardCategory['whateverstring']).variable

答案 2 :(得分:0)

枚举被编码为普通的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
}