我试图定义一个包含对象的对象模型。此对象可以是两种不同类型的对象。
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
因此我的问题是:是否可以创建一个带有接口的联合类型?
最佳答案
是的,您可以创建一个带有接口的联合,您刚才做了,但是您只能访问联合的公共成员。可以使用类型保护来缩小类型范围,然后可以访问特定成员。在这种情况下,您可以使用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
}
关于typescript - 具有各种接口(interface)的 typescript 联合类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50948967/