typescript - 打字稿切换枚举键
问题描述
给定一个枚举:
export enum COLOR {
BLUE= 'blue',
DARK_BLUE='blue',
RED= 'red',
}
我想做一个这样的开关盒:
function foo(colorKey: string){
//for exemple colorkey has value : DARK_BLUE
switch (colorKey){
case COLOR.BLUE:
//do somthing:
case COLOR.DARK_BLUE:
//do another thing
}
这不起作用,因为 COLOR.DARK_BLUE 返回值('blue')而不是键(DARK_BLUE),我想将开关的值与枚举的键而不是它的值进行比较。
编辑: 这段代码没问题,当我们调用 foo 时我们确实有 IntelliSense,这很好,但问题是:
- 当我们编写 foo 的 switch case 时,我们必须 copy_past 枚举的所有值(失去智能)。
- 如果有一天某天向枚举添加了一个新值,编译器将无法检测到 switch case 不是更详尽的。
这就是为什么我仍在寻找更好的方法。
我想出了自己的解决方案,我一有时间就会发布它,但总而言之,我创建了一个值与键相同的枚举。
旧枚举的值现在存储在不同的常量对象中。我的结论是,在 typecrpit 枚举中,我们不能在一个枚举中存储 2 个信息,但仍然能够正确访问它。
如果您有一个更好的解决方案,我仍在寻找
解决方案
只需检查它的关键是在枚举...
function foo(colorKey: string){
const color = COLOR[colorKey as keyof typeof COLOR];
if (color) {
// It is one of enum values
} else {
// ...
}
}
推荐阅读
- json - 从在线 HTTP 获取 Flutter 中的查询
- dialogflow-cx - DialogFlow CX webhook 基础知识
- javascript - 使用 ReactTable 使用来自 JSON axios 请求的数据创建表
- firemonkey - FMX:TMenuItem 快捷键 Ctrl+Alt+O 和 Ctrl+Alt+A 不起作用
- postgresql - 从 postgres 中的表中删除分区
- navigation - 我无法将绑定视图设置为线性布局
- python - 制作一个由多个列表组成的数据框作为行,Python
- sugarcrm - 有没有办法从命令行运行修复和重建?
- algorithm - introselect 的最差时间复杂度如何变成“O(n)”?
- django - Docker 上 Django 项目的 Webpack(生产)