是否可以强制类型转换?

时间:2020-09-11 17:23:14

标签: typescript

我正在使用一个API,该API公开了一种方法,该方法可能会从两个不同的类(例如CarBike)之一返回对象。也就是说,该方法将具有以下签名:

getVehicle(): Car | Bike

现在让我们说,在特定情况下,我确定此方法将返回Car,因此我可以调用getVehicle().fillTank(),该方法仅在Car中可用。但是TypeScript不允许我这样做,因为它认为该对象也可能是Bike,并且在这种情况下,它没有fillTank()方法。

也不会像在Car中那样强制我转换为const car: Car = getVehicle();,因为Car中缺少Bike的某些属性。有没有解决此问题的方法?

2 个答案:

答案 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();