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

如何正确抽取独立函数并在calclulateOrders中调用

TypeScript 订单统计逻辑抽离实现方案

原代码存在三个可优化点:

  • 变量名拼写不一致:定义的分组变量为groupedOrders,实际取值时误用groupedBYType,直接运行会触发引用错误
  • 类型订单计数逻辑内联在主函数中,耦合度高,后续扩展其他类型统计时会导致主函数冗余
  • 函数名存在拼写错误:calclulateOrders正确拼写应为calculateOrders,可按需修正

1. 先定义符合TS规范的类型约束

首先明确各数据结构的类型,避免隐式any,同时为抽离的函数定义明确的输入输出类型:

// 订单类型枚举,按实际业务值扩展
type OrderType = "redOrders" | "blueOrders" | "normalOrders";

// 订单结构类型
interface Order {
  order: {
    type: OrderType;
    [key: string]: unknown;
  };
  [key: string]: unknown;
}

// 抽离的类型统计函数返回值结构
interface OrderTypeBreakDown {
  totalCalcOrders: number;
  // 后续新增其他类型统计字段直接在这里补充,例如 blueOrdersCount: number
}

// 最终计算结果的嵌套类型
interface TypeOrdersStats {
  totalCalcOrders: number;
}

interface Calculations {
  total: number;
  typeOrders: TypeOrdersStats;
}

2. 实现独立的订单类型拆分统计函数

遵循单一职责原则,把按类型分组、计数的逻辑全部抽离到独立函数中,后续调整统计规则只需要修改这个函数:

import _ from "lodash"; // 保留原代码的lodash依赖,也可以替换为原生实现

/**
 * 按订单类型统计对应数量
 * @param orders 原始订单列表
 * @returns 各类型订单的统计结果
 */
const orderTypeBreakDown = (orders: Order[]): OrderTypeBreakDown => {
  const groupedByType = _.groupBy(orders, "order.type");
  return {
    // 用可选链+空值合并运算符简化原三元判断,逻辑完全等价:分组不存在时兜底返回0
    totalCalcOrders: groupedByType["redOrders"]?.length ?? 0
  };
};

如果不想引入lodash依赖,可以用原生reduce实现分组逻辑,替换上面的_.groupBy调用:

const groupedByType = orders.reduce<Record<OrderType, Order[]>>((acc, cur) => {
  const curType = cur.order.type;
  if (!acc[curType]) acc[curType] = [];
  acc[curType].push(cur);
  return acc;
}, {} as Record<OrderType, Order[]>);

3. 重构主计算函数,调用抽离的逻辑

移除原代码中无意义的嵌套块级作用域,修正变量拼写问题,主函数只负责组装最终返回结果:

export const calculateOrders = (orders: Order[]): Calculations => {
  const typeBreakdownStats = orderTypeBreakDown(orders);
  return {
    total: orders.length,
    typeOrders: {
      totalCalcOrders: typeBreakdownStats.totalCalcOrders
    }
  };
};

如果需要兼容原有拼写错误的函数名导出,可以额外加一行别名导出,不影响旧代码调用:

export const calclulateOrders = calculateOrders;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:33:16