首页 > 解决方案 > 打字稿:来自接口键的枚举

问题描述

我有一个界面:

interface ISomething {
  red: string;
  blue: string;
  green: string;
}

是否可以定义 Enum 来表示接口中的键?

我想得到这样的结果:

enum SomethingKeys {
   red = "red",
   blue= "blue",
   green= "green",
}

ps:我是ts新手,如果问题不正确,请见谅。

标签: typescriptenumsinterface

解决方案


您可以通过使用枚举键创建对象来做其他方式:

enum SomethingKeys {
   red = "red",
   blue= "blue",
   green= "green",
}
type ISomething= Record<SomethingKeys, string>
const a: ISomething = {
    [SomethingKeys.blue]: 'blue',
    [SomethingKeys.red]: 'red',
    [SomethingKeys.green]: 'green',
}

但我认为你真正需要的不是枚举,而是联合类型的键,你定义的keyof. 考虑:

interface ISomething {
  red: string;
  blue: string;
  green: string;
}
type Keys = keyof ISomething; // "red" | "blue" | "green"

当您声明自己是新手时,可以使用字符串文字联合。你不需要枚举。

当您拥有时,Keys您也可以使用它们来创建其他类型

// new object with keys of the original one
type OtherTypeWithTheSameKeys = Record<Keys, number> // type with keys of type Keys
const a: OtherTypeWithTheSameKeys = {
  blue: 1,
  green: 2,
  red: 3
}

推荐阅读