我有一个用例,我需要用相同的键声明多个文本枚举,例如:
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',
}
答案 0 :(得分:1)
有一些解决方案可以实现您要执行的操作,即:扩展枚举。 GitHub上确实存在一个问题,该问题提供了许多解决方法:https://github.com/Microsoft/TypeScript/issues/17592
一种解决方案是不使用 enum
,而使用看起来像的enum
(https://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
}