【问题标题】:How do I a union type of string values from an enum? [duplicate]如何从枚举中获取联合类型的字符串值? [复制]
【发布时间】:2020-12-24 17:49:21
【问题描述】:

我有一个这样的enum

enum A {
  Car = "car",
  Bike = "bike",
  Truck = "truck"
}

我想得到car | bike | truck的类型

我知道keof typeof A 可以给我Car | Bike | Truck,但我需要这里的值而不是键。

【问题讨论】:

  • 你不只是想要...A吗?这就是表示任何枚举值的类型。
  • 你想做什么?我可能会放弃枚举并首先使用'car' | 'bike' | 'truck'
  • 这对为什么不可能的原因进行了彻底的解释:stackoverflow.com/questions/50376977/… 但是,就像我上面的两个人一样,我也相信你想要实现的目标可以在没有价值观联合的情况下完成.你能具体说一下是什么吗?

标签: typescript


【解决方案1】:

不幸的是,据我所知,您在此处尝试使用枚举是不可能的。

如果您没有使用enum,您可以通过使用对象来保存您的类型的值并使用const assertions(仅当您使用TypeScript 3.4+) 来创建基于键和值的类型,充当类似枚举的类型。

例子:

const A = {
  Car: "car",
  Bike: "bike",
  Truck: "truck",
} as const;

type A = typeof A[keyof typeof A];

const x: A = A.Bike; // A.Car, A.Bike, A.Truck
const y: A = "bike" // "car", "bike", "truck"

【讨论】:

  • 感谢您的回复。我不确定何时应该使用 enum 与 const 对象。我只需要一种方法来引用一些硬编码的字符串,但我认为 enum 很适合。
  • enum 是处理可能是特定情况之一的值的好方法,而如果您只是在寻找一种将类型限制为一系列特定值的方法并且不需要一种“漂亮”的方式来通过键来引用值我会看看创建一个联合类型,正如在回复您最初的问题时所建议的那样。例如type A = "car" | "bike" | "truck" 如果您需要稍后在代码中引用密钥,我只会实现我的示例。
猜你喜欢
  • 1970-01-01
  • 2018-02-14
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多