【发布时间】:2017-08-25 22:24:42
【问题描述】:
请考虑下面的简单联合类型示例:
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 类型由 Alarm 和 Car 等不同接口组成时,我无法再访问 alarmText 属性。我理解它的方式是编译器无法推断我指的是警报对象。在联合类型中只能访问不相交的属性。对吧?
如果这是正确的,一旦在联合类型的变量中声明了原始警报对象,我该如何取回它? 我首先虽然我可以做一个类型保护,比如
if (typeof bar === 'Alarm') {
bar.alarmText
}
但typeof bar 只是'object',因此 gaurd 没有任何意义。
有人吗?
【问题讨论】:
-
顺便说一句,这在 TypeScript 2.3 中无需更改即可工作
标签: typescript