Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串数组转换为枚举_Javascript_Typescript_Enums - Fatal编程技术网

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'