如何在TypeScript枚举中使用属性键(object.key)?

如何在TypeScript枚举中使用属性键(object.key)?,typescript,enums,Typescript,Enums,我想将一些JS数组转换为 我知道我能做到: export enum FRUIT { PEACH, BANANA } 但在本例中,“水果”是从单独的文件导出的,其格式为: const FRUIT = { PEACH: "delicious peach", BANANA: "wow a banana that's awesome", PEAR: "gross pear do not allow pear using the En

我想将一些JS数组转换为

我知道我能做到:

export enum FRUIT {
  PEACH,
  BANANA
}
但在本例中,“水果”是从单独的文件导出的,其格式为:

const FRUIT = {
  PEACH: "delicious peach",
  BANANA: "wow a banana that's awesome",
  PEAR: "gross pear do not allow pear using the Enum"
};
(我想确保只有一部分水果,例如“美味桃子”可以设置为可接受的水果)

我需要做:

export enum ACCEPTABLE_FRUIT {
  FRUITS.PEACH,
  FRUITS.BANANA
}
但是,这是一个语法错误:

只有数值枚举可以有计算成员,但此表达式的类型为“string”。如果不需要穷举检查,请考虑使用对象文字。
我如何在TypeScript枚举中使用属性键(object.key)?或者,如果我不能,我如何避免语法错误?

这并不能为您提供枚举,但如果您的目标只是能够表达“要么
水果.桃子
要么
水果.香蕉
”,则不需要

  • 首先,您需要键入比字符串更具体的
    FRUIT
    值,您可以使用
    作为const
    (请参阅):

  • 其次,您需要一个“valueof”类型,如的回答所示:


什么是
水果
?您似乎试图使用其中的值作为名称,这没有多大意义-是否希望导出枚举水果类型{PEACH=FRUIT.PEACH,…}?或者,您只能使用水果类型的键作为值(例如,
“PEACH”
)?一旦创建了它,您将如何使用它?请回答包含此信息的问题。这是一组字符串
keyof typeof FRUIT
?请把这个问题和一个说明你打算如何使用它的例子一起放在问题中。在操场上试试-
type FRUIT\u NAMES=keyof typeof FRUIT
将是
“PEACH”|“BANANA”|“PEAR”
。然后是的,你可能想要一个带有
Pick
(“仅桃或香蕉”)或
省略(“非梨”)的“valueof”-看。不过,这并不能让你得到一个枚举,只是想承认你之前说这是一个y/x问题时是对的。我认为枚举是在这种情况下限制值的唯一方法,但显然不是。
const FRUIT = {
  PEACH: "delicious peach",
  BANANA: "wow a banana that's awesome",
  PEAR: "gross pear do not allow pear using the Enum"
} as const;
type ValueOf<T> = T[keyof T];
type ACCEPTABLE_FRUIT = ValueOf<Pick<typeof FRUIT, "PEACH" | "BANANA">>;
// type ACCEPTABLE_FRUIT = "delicious peach" | "wow a banana that's awesome";