You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中对象能否实现继承?以菜单扩展场景为例

问题解答

首先要明确:TypeScript里的**继承是针对类(class)**的特性,你代码里的baseMenu、chicagoMenu都是数组(集合),不是类的实例对象,所以没法用“继承”来实现让城市菜单包含基础菜品的需求。

要实现遍历城市菜单时能拿到基础菜品+专属菜品的效果,直接合并数组就可以,有两种常用方式:

方式1:创建新的合并后数组(不修改原数组)

用扩展运算符...把基础菜单和城市专属菜单合并成新数组,原数组保持不变,遍历新数组即可:

// 合并基础菜单与芝加哥专属菜单
const chicagoFullMenu = [...baseMenu, ...chicagoMenu];
// 合并基础菜单与休斯顿专属菜单
const houstonFullMenu = [...baseMenu, ...houstonMenu];

// 遍历chicagoFullMenu就能拿到所有菜品
for (const dish of chicagoFullMenu) {
  console.log(`${dish.dish}: ${dish.price}`);
}

方式2:直接修改原城市菜单数组

如果希望chicagoMenu本身就包含基础菜品,可以用push方法把基础菜单的元素添加进去(会修改原数组):

// 把基础菜单的所有菜品添加到芝加哥菜单末尾
chicagoMenu.push(...baseMenu);

// 此时遍历chicagoMenu就能拿到所有菜品
for (const dish of chicagoMenu) {
  console.log(`${dish.dish}: ${dish.price}`);
}

补充:TypeScript类型规范

为了让代码更严谨,建议先定义菜品的类型,给数组指定类型:

// 定义菜品类型
type Dish = {
  dish: string;
  price: string;
};

// 给各菜单数组指定类型
const baseMenu: Dish[] = [ 
  {dish : "fried chicken", price :"3$"},
  {dish : "pepsi", price :"1$"},
  {dish : "burger", price :"2$"},
];

const chicagoMenu: Dish[] = [
  {dish : "pizza", price :"3$"},
  {dish : "hot dog", price :"1$"} // 原代码的"1#"应为笔误,这里修正为"1$"
];

const houstonMenu: Dish[] = [
  {dish : "sandwich", price :"2$"},
  {dish : "Orange juice", price :"2$"}
];

内容的提问来源于stack exchange,提问作者user3083590

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:12:38