我想根据从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
答案 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不提供类型安全。