求解: typescript 如何根据 enum 的字符值返回对应的 enum 实例?

2023-05-15 09:39:29 +08:00
 hahaFck

比如定义以下 enum

const enum VerticalAlign {
   bottom, center, top
}

定义下面方法

//data 是后台返回的数据
function getVerticalAlign(data:JsonData):VerticalAlign {
	let value:string|null = data['vAlign'];
    switch(value) {
    	case VerticalAlign.bottom:
        	return VerticalAlign.bottom;
        ........
    }
}

现在的写法就是每个 enum 的值都要判断一次然后返回,有通用的方法返回一个 enum 的值么,直接写 VerticalAlign[value] 编译器报错.

1660 次点击
所在节点    程序员
23 条回复
Lenic
2023-05-15 17:51:36 +08:00
type VerticalAlign = "bottom" | "center" | "top";

不知道这样行不行,本质上你传进来的参数是字符串,到时候 as 一下就可以了

const abc = data.vAlign as VerticalAlign;

这样 abc 就是 VerticalAlign 类型的,但又是字符串类型的,是带有约束的字符串,即必须是 "bottom"、"center"、"top" 这三个字符串中的一个
jsq2627
2023-05-16 03:44:06 +08:00
ts 的 enum 有种说不上来的残废感
hahaFck
2023-05-16 09:45:16 +08:00
@ysc3839
@mxT52CRuqR6o5

已经放弃了,这东西怎么转换都麻烦,还是一个一个判断吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/940015

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX