gpt4 book ai didi

typescript - 访问联合类型中的属性

转载 作者:行者123 更新时间:2023-12-05 06:42:54 25 4
gpt4 key购买 nike

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

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 类型包含不同的接口(interface),如 AlarmCar 时,我无法再访问 alarmText 属性。我的理解是编译器无法推断我指的是警报对象。在联合类型中只能访问非不相交的属性。对吧?

如果这是正确的,一旦在联合类型的变量中声明了我的原始警报对象,我怎么才能取回它?我首先想到我可以做一个像

if (typeof bar === 'Alarm') {
bar.alarmText
}

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

有人吗?

最佳答案

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

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;
}

关于typescript - 访问联合类型中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35580140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com