我正在用 angular 11 编写一个具有不同类型事件的事件系统
我正在为不同类型的事件定义一个枚举
enum EventTypes {
Pending,
Active,
Complete
}
和不同事件的接口
interface PendingEvent { type: EventTypes.Pending }
interface ActiveEvent { type: EventTypes.Active, progress: number }
interface CompleteEvent { type: EventTypes.Complete, data: any }
然后我定义一个类型来捆绑这些事件
type Event = PendingEvent | ActiveEvent | CompleteEvent;
但是现在,每次我创建一个新事件时,我都必须给出一个类型。
const event: ActiveEvent = {
progress: 83
}
我收到一条错误消息,说我缺少“类型”属性。
我希望根据我创建的事件类型自动设置类型。
答案 0 :(得分:0)
如果您使用类,您可能能够实现您想要的。如果您愿意,您甚至可以保留该界面,或将其简化为一个界面。
interface EventInterface { type: EventTypes; progress?: number; data?: any}
class ActiveEvent implements EventInterface {
constructor (progress: number) {
this.type = EventTypes.Active;
this.progress = progress;
}
}
const event = new ActiveEvent(82);
类似地,您可以为其他两种类型的事件创建类,由构造函数自动设置类型。
当然,类和类的实例与您现在拥有的类型化变量不同,但听起来这可能有助于您的(我猜到的)用例。
此处的信息可能会有所帮助:https://www.typescriptlang.org/docs/handbook/interfaces.html#implementing-an-interface