【发布时间】:2021-02-18 23:06:18
【问题描述】:
我正在用 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
}
我收到一条错误消息,提示我缺少“类型”属性。
我希望根据我创建的事件类型自动设置类型。
【问题讨论】:
-
这不会发生。 TypeScript 不会设置值,它在运行时不存在。一旦类型被编译删除,你就只有
const event = { progress: 83 }。 -
@jonrsharpe 有没有办法设置不同事件的类型?所以我不能检查'event.type === EventType.Active'?
-
你必须做运行时工作; TS 不会根据其静态类型系统发出不同的代码。但是您可以将运行时工作重构为只完成一次……例如,this 是否适合您?
标签: typescript angular11