javascript - TypeScript 将枚举值分配给另一个枚举值
问题描述
我有一个方法叫saveTask
type Task = string;
enum Priority {
Low = "Low",
Medium = "Medium",
High = "High",
}
enum Label {
Low = "Low",
Med = "Med",
High = "High",
}
interface Item {
task: Task;
priority: Priority;
}
const saveTask = ({ task, priority }: Item) => {
const id = Date.now();
let label: Label;
if (priority === "Medium") {
label = Label.Med;
} else {
label = priority;
}
// dispatch(addItem({ task, priority, id, isActive: true, label }));
// handleClose();
};
在这里,“优先级”是一个等于“低”、“中”或“高”的值。基于优先级,我创建了一个称为标签的附加属性。标签可以是“低”、“中”或“高”
当我试图说时,在 else 块中
标签 = 优先级
这给了我一个错误
我该如何解决这个问题?
解决方案
这不是最干净的设计,但您可以强制编译器:
type Task = string;
enum Priority {
Low = "Low",
Medium = "Medium",
High = "High",
}
enum Label {
Low = "Low",
Med = "Med",
High = "High",
}
interface Item {
task: Task;
priority: Priority;
}
const saveTask = ({ task, priority }: Item) => {
const id = Date.now();
let label: Label;
if (priority === Priority.Medium) {
label = Label.Med;
} else {
label = Label[Priority[priority] as keyof typeof Label];
}
console.log(label);
};
saveTask({task: 'test', priority: Priority.Low}); // "Low"
saveTask({task: 'test', priority: Priority.Medium}); // "Med"
saveTask({task: 'test', priority: Priority.High}); // "High"
推荐阅读
- node.js - 当前未启用对实验语法“moduleAttributes”的支持
- kotlin - 更新 Map 中的 MutableList
- shader - 使用片段着色器将边框绘制到多边形
- codelite - 行号codelite上的红色箭头
- javascript - if (!options.algorithms) throw new Error('algorithms should be set'); 错误:应该设置算法
- mysql - 如何在 MariaDB 中声明过程之外的变量
- mips - Mips/汇编语言求幂递归
- php - 包含的 PHP 脚本不读取相同的静态变量?
- html - 如何获取下拉菜单以将其他下拉菜单向下推
- sql - SQL Server:将数据类型 nvarchar 转换为十进制时出错