Typescript не поддерживает множественное наследование.
Есть несколько причин, по которым вам нужно множественное наследование. Ваш пример, однако, не один из них.
Если, используя ваш пример, мне понадобится один класс, который инкапсулирует оба ингредиента, вот как я бы подошел к этому:
class CombinedItem {
private menuItems: HasPrice[];
constructor(menuItems: hasPrice[]) {
this.menuItems = menuItems;
}
getPrice() {
return this.menuItems.reduce(
(acc, curr) => acc + curr.getPrice(),
0
);
}
}
Этозатем можно построить следующим образом:
const item = new CombinedItem([
new Rice(),
new Chicken()
]);
CombinedItem - это класс, который может принимать любую комбинацию входных данных. Если вы хотите что-то действительно конкретное, вы можете сделать следующее:
class ChickenAndRice {
private chicken: Chicken;
private rice: Rice;
constructor(chicken: Chicken, rice: Rice) {
this.chicken = chicken;
this.rice = rice;
}
getPrice() {
return this.chicken.getPrice() + this.rice.getPrice();
}
}
Но я не уверен, почему вы когда-нибудь этого захотите.
Думать в направлении наследования для вашей проблемы - этоРаспространенная ошибка, и правильное решение состоит в том, чтобы объединять объекты и классы вместе, а не наследовать поведение.