访问联合类型中的属性

时间:2016-02-23 14:26:20

标签: typescript

请考虑下面的简单联合类型示例:

interface Alarm {
    alarmText: string,
    quali: number
}

interface Car {
    speed: number
}

type unionT = Alarm | Car;


var alarm: Alarm = {
    alarmText: "ALARM!!!",
    quali: 42
};

var bar: unionT = alarm;

bar.alarmText // ERROR

当unionT类型由AlarmCar等不同接口组成时,我无法再访问alarmText属性。我理解它的方式是编译器无法推断我指的是警报对象。只能在联合类型中访问非脱节属性。正确?

如果这是正确的,一旦在联合类型的变量中声明原始报警对象,我怎么能得到它? 我首先虽然可以像

那样做一个类型后卫
if (typeof bar === 'Alarm') {
    bar.alarmText
}

typeof bar只是'object',因此gaurd没有任何意义。

任何?

1 个答案:

答案 0 :(得分:0)

您可以编写自定义类型防护来实现此目的:

function isAlarm(a: Alarm | Car): a is Alarm {
    // Some check to see if this is an Alarm
    return (<Object>a).hasOwnProperty('alarmText');
}


if (isAlarm(bar)) {
    bar.alarmText;
}