如何在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传入自定义泛型来实现类型标注:
- 先定义和查询返回结构匹配的接口
// 自定义返回结果类型,和你声明的attributes字段对应 interface SumResult { dataValues: { total: number | null; } }
- 调用
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
相关产品推荐
相关产品推荐

