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

如何在TypeScript中为Sequelize聚合函数返回结果定义类型

方案1:直接使用Sequelize内置的sum方法(最推荐)

Sequelize模型原生提供sum聚合方法,返回值类型天然是Promise<number | null>,不需要额外处理类型转换,完全符合你的需求:

const result: number = await Model.sum('amount', {
  where: {
    // 替换为你的查询条件
  }
}) ?? 0;

聚合查询没有匹配到符合条件的行时会返回null,通过?? 0直接兜底得到数值类型结果。


方案2:如需继续使用findAll进行聚合查询,通过泛型指定返回类型

如果你需要同时查询多个聚合字段,必须使用findAll的场景,可以通过给findAll传入自定义泛型来实现类型标注:

  1. 先定义和查询返回结构匹配的接口
// 自定义返回结果类型,和你声明的attributes字段对应
interface SumResult {
  dataValues: {
    total: number | null;
  }
}
  1. 调用findAll时传入泛型参数
const resultList = await Model.findAll<SumResult>({
  attributes: [
    [Sequelize.fn('sum', Sequelize.col('amount')), 'total']
  ],
  where: {
    // 替换为你的查询条件
  }
});
const result: number = parseInt(resultList[0].dataValues.total ?? '0', 10);

两种方案都可以完全避免使用//@ts-ignore注释,符合TypeScript类型规范。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:00:05