I have an existing abstract class, say Vehicle and I want to create an intermediate class to reduce repetition of abstract properties in my instantiatable classes.
The problem:
abstract class Vehicle {
abstract wheelCount: number
abstract tireCount: number
}
class Car extends Vehicle {
wheelCount = 4
tireCount = 4 // Tire count is the same as wheel count
}
class Truck extends Vehicle {
wheelCount = 4
tireCount = 4 // Tire count is the same here too
}
class Bike extends Vehicle {
wheelCount = 2
tireCount = 2 // Tire count is the same - I really need to abstract this
}
An invalid solution:
abstract class Vehicle {
abstract wheelCount: number
abstract tireCount: number
}
// I want an intermediate class like this
abstract class StandardVehicle extends Vehicle {
tireCount = wheelCount
}
class Car extends StandardVehicle {
wheelCount = 4
}
class Truck extends StandardVehicle {
wheelCount = 4
}
class Bike extends StandardVehicle {
wheelCount = 2
}
What are the valid solutions to this please?
Please note, there are cases where wheelCount and tireCount will differ so I can't combine these properties in Vehicle.