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
相关产品推荐
相关产品推荐

