使用函数重载实现
// 函数重载声明
function handleCartItem(userType: '普通用户', item: any, quantity: number): void;
function handleCartItem(userType: '会员用户', item: any, quantity: number): void;
function handleCartItem(userType: '管理员', item: any, newInfo: any): void;
// 函数实现
function handleCartItem(userType: string, item: any, arg: any): void {
if (userType === '普通用户') {
const limit = 10;
if (arg > limit) {
console.log('普通用户限购10件');
} else {
console.log('已将商品添加到购物车');
}
} else if (userType === '会员用户') {
const discount = 0.9;
const price = item.price * discount;
console.log(`会员用户享受折扣,商品价格为 ${price}`);
} else if (userType === '管理员') {
item = {...item, ...arg };
console.log('已修改商品信息');
}
}
使用联合类型实现
type UserType = '普通用户' | '会员用户' | '管理员';
interface CartItem {
// 商品信息相关类型定义
[key: string]: any;
}
function handleCartItem(userType: UserType, item: CartItem, quantityOrInfo: number | CartItem): void {
if (userType === '普通用户') {
const limit = 10;
if (typeof quantityOrInfo === 'number' && quantityOrInfo > limit) {
console.log('普通用户限购10件');
} else {
console.log('已将商品添加到购物车');
}
} else if (userType === '会员用户') {
const discount = 0.9;
const price = item.price * discount;
console.log(`会员用户享受折扣,商品价格为 ${price}`);
} else if (userType === '管理员') {
if (typeof quantityOrInfo === 'object') {
item = {...item, ...quantityOrInfo };
console.log('已修改商品信息');
}
}
}
优缺点分析
函数重载
- 可维护性:
- 优点:函数重载通过不同的函数声明,使代码结构更加清晰,对于不同用户类型的操作一目了然,易于理解和维护。
- 缺点:如果操作逻辑变得复杂,函数实现体中的条件判断可能会增多,维护成本会有所上升。
- 扩展性:
- 优点:当需要新增用户类型或操作时,只需添加新的函数重载声明和在实现体中增加对应的条件分支,扩展相对容易。
- 缺点:随着用户类型和操作的增多,函数重载声明会变得冗长,可能导致代码可读性下降。
联合类型
- 可维护性:
- 优点:代码相对简洁,通过联合类型在一个函数中处理多种情况,减少了代码冗余。
- 缺点:函数内部的逻辑判断可能会变得复杂,需要通过类型判断来区分不同的操作,增加了理解和维护的难度。
- 扩展性:
- 优点:添加新的用户类型或操作时,只需在联合类型中增加新的值,并在函数内部增加对应的类型判断逻辑,相对灵活。
- 缺点:随着业务逻辑的扩展,函数内部的类型判断逻辑会变得更加复杂,可能导致代码可读性和可维护性降低。