Javascript 将字符串数组转换为枚举
比如说,我有一个数组Javascript 将字符串数组转换为枚举,javascript,typescript,enums,Javascript,Typescript,Enums,比如说,我有一个数组constcolors=['R','G','B'](或者对象constcolors={R:'R',G:'G',B:'B'},也可以)。考虑到将typescript枚举传输到对象中,如果我没有遗漏任何内容的话。有没有办法将上述数组(或对象)动态解析为enum 例如,类似(非工作为了示例起见,伪代码示例): 或 背后的整个想法是将一长串字符串值转换为enum,而无需硬编码英里长的类型定义,如: type Color = 'R' | 'G' | 'B' .. /* followed
constcolors=['R','G','B']
(或者对象constcolors={R:'R',G:'G',B:'B'}
,也可以)。考虑到将typescript枚举传输到对象中,如果我没有遗漏任何内容的话。有没有办法将上述数组(或对象)动态解析为enum
例如,类似(非工作为了示例起见,伪代码示例):
或
背后的整个想法是将一长串字符串值转换为enum,而无需硬编码英里长的类型定义,如:
type Color = 'R' | 'G' | 'B' .. /* followed by gazillion more color values */
简短回答: 只有数值枚举可以有计算成员,但此表达式的类型为“string”。如果不需要穷举检查,请考虑使用对象文字代替“.< /P>”。 长答案: 不幸的是,你可以做到,但这并不意味着你应该:
const colors=['R','G','B']
枚举颜色{}
常量结果=颜色。减少((acc,elem)=>{
返回{
…acc,
[元素]:元素
}
},颜色)
在这种情况下,您将失去类型安全性。TS,无法确定冒号枚举的类型
type O=keyof-typeof-result//never,TS不再对这种类型一无所知
枚举颜色{
R='R',
G='G',
B='B'
}
type O2=keyof typeof OkColor/'R'|'G'|'B'-->这里TS知道enum的键
尽量避免枚举。
最好的方法是使用常量对象:
const colors={
R:‘R’,
G:‘G’,
B:‘B’,
}作为常量;
如果仍要使用枚举,请至少与const
关键字一起使用。看
常量枚举X{
A='A'
}
以下是将数组转换为只读对象的类型安全代码:
const colors=['R','G','B']作为常量;
类型值数组=T[编号]
类型ToObj={
[P in K]:P
}
类型ToEnum=ToObj
const toPseudoEnum=(arr:T):只读=>{
返回arr.reduce((acc,elem)=>{
返回{
…acc,
[元素]:元素
}
}, {})
}
const customEnum=toPseudoEnum(颜色);//{R:'R',G:'G',B:'B'}
我想你需要这样的东西:
const Colors = ['Red', 'Blue', 'Green'] as const;
type colors = typeof Colors[number] // 'Red' | 'Blue' | 'Green'
希望这对您有用:)
type Color = 'R' | 'G' | 'B' .. /* followed by gazillion more color values */
const Colors = ['Red', 'Blue', 'Green'] as const;
type colors = typeof Colors[number] // 'Red' | 'Blue' | 'Green'