是否可以为枚举设置某种接口?

时间:2019-10-21 09:02:43

标签: angular typescript

我有一个用例,我需要用相同的键声明多个文本枚举,例如:

enum Title {
  ScreenA = 'screen A text',
  ScreenB = 'screen B text',
}

enum Content {
  ScreenA = 'Content A text',
  ScreenB = 'Content B text',
}

这些枚举在Angular模板中使用。

是否可以创建某种界面来确保当新屏幕出现时所有枚举都要求它?

我想要什么:

SomeKindOfInterfaceForMyEnum {
  ScreenA: string,
  ScreenB: string,
  ScreenC: string,
}

enum Content uses SomeKindOfInterfaceForMyEnum  { ///<-- ERROR ScreenC is required
  ScreenA = 'Content A text',
  ScreenB = 'Content B text',
}

2 个答案:

答案 0 :(得分:1)

有一些解决方案可以实现您要执行的操作,即:扩展枚举。 GitHub上确实存在一个问题,该问题提供了许多解决方法:https://github.com/Microsoft/TypeScript/issues/17592

一种解决方案是不使用 enum,而使用看起来像enumhttps://github.com/Microsoft/TypeScript/issues/17592#issuecomment-375968511

const BasicEvents = {
  Start: 'Start' as 'Start',
  Finish: 'Finish' as 'Finish'
};
type BasicEvents = (typeof BasicEvents)[keyof typeof BasicEvents];

const AdvEvents = {
  ...BasicEvents,
  Pause: 'Pause' as 'Pause',
  Resume: 'Resume' as 'Resume'
};
type AdvEvents = (typeof AdvEvents)[keyof typeof AdvEvents];

其他解决方案是使用带有readonly变量的类,该类将包含您的转换键。然后,您可以使用extends关键字。

希望有帮助。

答案 1 :(得分:0)

我使用@Eastrall idea作为使用界面的最终解决方案的基础。

声明一个接口:

SomeKindOfInterfaceForMyEnum {
  ScreenA: string,
  ScreenB: string,
  ScreenC: string,
}

使用const而不是字符串枚举。

const Content: SomeKindOfInterfaceForMyEnum  = { 
  ScreenA: 'Content A text',
  ScreenB: 'Content B text',
// <-- asks for ScreenC
}