MST

星途 面试题库

面试题:TypeScript 函数参数默认值在复杂业务逻辑封装中的应用

在一个电商项目中,有一个计算商品总价的函数。这个函数接收商品价格数组、折扣率(默认为1,表示无折扣)以及是否包含运费(默认为 true)作为参数。运费固定为10元。要求用 TypeScript 实现该函数,并阐述如何通过合理设置参数默认值,使得该函数在不同业务场景下都能高效复用,同时分析这种设置可能带来的潜在问题。
32.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

实现代码

function calculateTotal(prices: number[], discount: number = 1, includeShipping: boolean = true): number {
    let subtotal = prices.reduce((acc, price) => acc + price, 0);
    let discountedSubtotal = subtotal * discount;
    return includeShipping ? discountedSubtotal + 10 : discountedSubtotal;
}

参数默认值的作用及复用性

  1. 折扣率默认值 1:在大部分商品无折扣的场景下,调用函数时无需传入折扣率参数,简化了调用过程。若遇到有折扣的商品,只需传入相应的折扣率即可,提高了函数在不同折扣场景下的复用性。
  2. 是否包含运费默认值 true:多数情况下商品总价是包含运费的,所以默认设置为 true。当遇到特殊情况(如包邮),可以传入 false 来计算不包含运费的总价,增强了函数在运费处理上的灵活性和复用性。

潜在问题

  1. 参数顺序问题:如果调用者不熟悉函数参数顺序,可能会错误地传入参数,例如将是否包含运费的布尔值传入折扣率参数位置,导致计算结果错误。
  2. 假设性问题:默认运费为 10 元写死在函数内部,若运费规则发生变化,需要修改函数内部代码,可能影响到依赖该函数的其他业务逻辑。另外,默认折扣率为 1 和默认包含运费的假设,在某些特殊业务场景下,可能需要额外的处理来覆盖默认值,增加了代码复杂性。