我想声明一个类型为enum
的成员的接口,如-任何enum
一样。这里的想法是比说any
更加安全,但仍然对将来的enum
类型开放。
用例:
我正在为redux定义一个操作界面,并且我希望BaseAction
界面是这样的:
export interface BaseAction {
type: enum; //this gives an error
payload: any;
}
是否有一种方法可以声明成员的类型为any
,只要它是enum
?
这样,将来我可以定义一下:
export enum SpecificActionType {
SPECIFIC_1 = "SPECIFIC_ACTION_1",
SPECIFIC_2 = "SPECIFIC_ACTION_2",
}
export interface SpecificAction1 extends BaseAction {
type: SpecificActionType.SPECIFIC_1;
payload: {
id;
};
}
作为免责声明,我是redux和Typescript的新手,但是正在寻找一种对开发人员友好的,严谨的,面向未来的范例。如果您有更好的主意,我也愿意接受。
答案 0 :(得分:1)
基本上不是通用类型,而是基本类型。不幸的是,打字稿无法使您执行此操作。要提供这种类型的可扩展性,您需要:
export interface BaseAction {
type: SpecificActionEnum | OtherActionEnum;
payload: any;
}
any
或unknown
类型。答案 1 :(得分:0)
您可以添加通用类型,但不能真正强制它必须是枚举(AFAIK)。但是枚举的repr至少必须是字符串或数字。
因此,与任何类型的编译时类型检查相比,它实际上是类型更多的 annotation ,但它可以使代码更清晰:
export interface BaseAction<T extends string | number> {
type: T;
payload: any;
}
export enum SpecificActionType {
SPECIFIC_1 = "SPECIFIC_ACTION_1",
SPECIFIC_2 = "SPECIFIC_ACTION_2",
}
export interface SpecificAction1 extends BaseAction<SpecificActionType> {
type: SpecificActionType.SPECIFIC_1;
payload: {
id: number;
};
}