1. 枚举反向映射
除了创建一个以属性名做为对象成员的对象之外,数字枚举成员还具有了 反向映射,从枚举值到枚举名字。
生成的代码中,枚举类型被编译成一个对象,它包含了正向映射( name
-> value
)和反向映射( value
-> name
)。
enum Direction {
Up,
Down,
Left,
Right,
}
var Direction;
(function (Direction) {
Direction[Direction["Up"] = 0] = "Up";
Direction[Direction["Down"] = 1] = "Down";
Direction[Direction["Left"] = 2] = "Left";
Direction[Direction["Right"] = 3] = "Right";
})(Direction || (Direction = {}));
几种处理枚举的方法
interface MapItem<TEnum, CnEnum> {
key: string,
value: string,
label: string
}
/**
* @description: 将 enum 与中文 enum 转换为数组,适合直接输出在 v-for 里
* @param {TEnum} map
* @param {CnEnum} mapCn
* @return {MapItem[]} 返回适合于循环的数组
* key:enum 大写的 key
* value:传给后端的值
* label:中文值
*/
export function convertMap<TEnum, CnEnum>(map: TEnum, mapCn: CnEnum):MapItem<TEnum, CnEnum>[] {
return Object.keys(mapCn).map(key => {
return {
key,
value: map[key],
label: mapCn[key]
}
})
}
interface ValueLabel {
[key: string]: string
/**
* @description: 返回后端的值对应中文的对象
* @param {TEnum} map
* @param {CnEnum} mapCn
* @return {ValueLabel} 后端的值对应中文,例如{ Y: 是, N: 否 }
*/
}
export function convertValueLabel<TEnum, CnEnum>(map: TEnum, mapCn: CnEnum): ValueLabel {
const valueLabel:ValueLabel = {}
Object.keys(mapCn).forEach(key => {
valueLabel[map[key]] = mapCn[key]
})
return valueLabel
}
/**
* @description: 同上,只不过是中文对应英文
* @param {TEnum} map
* @param {CnEnum} mapCn
* @return {ValueLabel} 中文对应后端的值,例如{ 是: Y, 否: N }
*/
export function convertLabelValue<TEnum, CnEnum>(map: TEnum, mapCn: CnEnum): ValueLabel {
const valueLabel:ValueLabel = {}
Object.keys(mapCn).forEach(key => {
valueLabel[mapCn[key]] = map[key]
})
return valueLabel
}