首页 > 解决方案 > 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 块中

标签 = 优先级

这给了我一个错误

在此处输入图像描述

我该如何解决这个问题?

标签: javascriptreactjstypescriptvue.js

解决方案


这不是最干净的设计,但您可以强制编译器:

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"

推荐阅读