我试图定义一个包含对象的对象模型。此对象可以是两种不同类型的对象。

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/

10-10 07:40