我正在使用一个API,该API公开了一种方法,该方法可能会从两个不同的类(例如Car
或Bike
)之一返回对象。也就是说,该方法将具有以下签名:
getVehicle(): Car | Bike
现在让我们说,在特定情况下,我确定此方法将返回Car
,因此我可以调用getVehicle().fillTank()
,该方法仅在Car
中可用。但是TypeScript不允许我这样做,因为它认为该对象也可能是Bike
,并且在这种情况下,它没有fillTank()
方法。
也不会像在Car
中那样强制我转换为const car: Car = getVehicle();
,因为Car
中缺少Bike
的某些属性。有没有解决此问题的方法?
答案 0 :(得分:6)
安全的方法是使用user defined type guards
function isCar(vehicle: Car | Bike): vehicle is Car {
return (vehicle as Car).fillTank !== undefined
}
const vehicle = getVehicle()
if (isCar(vehicle)) {
console.log(vehicle.fillTank)
}
答案 1 :(得分:3)
尝试像这样使用as
运算符。
const car = getVehicle() as Car;
car.fillTank();