在javascript中的ENUM翻译

时间:2018-03-28 13:16:35

标签: reactjs enums ecmascript-6

我想根据从api获取的枚举值定义类型转换,并将其转换为存储在应用程序中的字符串。

我从api获得price.currentPrice.comparisonFactor = 1并且我想将它存储在我的项目中的comparisonFactor.js类型文件中,因此它可以轻松编辑。

我的尝试是:

export const comparisonTypes = {
  0: 'PerKilogram',
  1: 'PerLitre',
  2: 'PerPiece',
  3: 'PerMetre',
  4: 'PerLoad',
  5: 'PerWash',
  6: 'ReadyToDrink',
  7: 'ReadyToEat',
  8: 'DrainedWeight',
}

我可以通过import comparisonTypes from 'path-to-file.js'导入 但我需要能够根据我从响应中传递的int prop来匹配它。我需要一些帮助和建议,以便在最佳实践中如何做到这一点。

我应该做一个映射这个对象的选择器,还是可以在对象中搜索匹配的int甚至更好的方法? :d

1 个答案:

答案 0 :(得分:1)

TypeScript output中可以看到,数字枚举提供了双向映射。这样枚举属性名称可以映射到数值,反之亦然。

所以它应该是:

export const comparisonTypes = {
  0: 'PerKilogram',
  PerKilogram: 0,
  1: 'PerLitre',
  PerLitre: 1,
  ...
};

这可以重写为构造函数,使其成为DRY:

function Enum(...fields) {
  for (let i = 0; i < fields.length; i++) {
    this[i] = [fields[i]];
    this[fields[i]] = i;
  }
}

const comparisonTypes = new Enum(
  'PerKilogram',
  'PerLitre',
  ...
);

这种方法是JavaScript方式。它不适用于TypeScript,因为DRYness不提供类型安全。