【问题标题】:TypeScript assign enum value to another enum valueTypeScript 将枚举值分配给另一个枚举值
【发布时间】:2021-10-21 15:52:13
【问题描述】:

我有一个方法叫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();
  };

这里的 `priority 是一个等于 "Low"、"Medium" 或 "High" 的值 根据优先级,我创建了一个称为标签的附加属性。标签可以是“低”、“中”或“高”

当我尝试说时在 else 块中

标签 = 优先级

这给了我一个错误

我该如何解决这个问题?

【问题讨论】:

  • 枚举是 TypeScript 将其视为名义类型的少数事物之一,这意味着您不能只将一个分配给另一个。如果您以这种方式使用它们,那么您真的不需要枚举。像this code 这样的strongly typed consts 怎么样?这对你有用吗?

标签: javascript reactjs typescript vue.js


【解决方案1】:

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

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"

【讨论】:

    猜你喜欢
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多