我正在尝试定义一个包含对象的对象模型。该对象可以是两种不同类型的对象。
export interface EventParams {
evtType: string;
evtData: FaultOrGoalData| SwapData;
}
export interface FaultOrGoalData {
evtName: string;
player: string;
position: string;
}
export interface SwapData {
swapPlayer: string;
}
我的问题是ts lint告诉我不可能访问封装对象中包含的数据。
示例:params.evtData.evtName
因此,我的问题是:是否可以使用接口创建联合类型?
答案 0 :(得分:5)
是的,您可以创建带有接口的联合,就像刚才那样,但是您只能访问联合的普通成员。您可以使用类型防护来缩小类型,然后可以访问特定成员。在这种情况下,您可以使用in
类型防护:
declare let foo: EventParams;
if('evtName' in foo.evtData) {
foo.evtData.evtName //foo.evtData is of type FaultOrGoalData
}else {
foo.evtData.swapPlayer // foo.evtData is of type SwapData
}