【问题标题】:Sequelize groupby proper typing with typescript通过使用打字稿正确键入来续集组
【发布时间】:2021-04-24 00:15:02
【问题描述】:

我想通过 Sequelize 应用 SUM 和 COUNT 函数执行 GROUP BY 查询。我面临的问题是返回的类型上不存在新的聚合列名。例如:

    const result = await SalesModel.findAll({
        attributes: [
            'partnerId',
            'status',
            [Sequelize.fn('count', Sequelize.col('value')), 'sales_num'],
            [Sequelize.fn('sum', Sequelize.col('value')), 'sales_value'],
        ],
        group: ['partnerId', 'status'],
        raw: true
    })

result[0] 具有在模型中定义的 partnerIdstatus 属性,但没有通过 GROUP BY 查询添加的 sales_numsales_value 属性。在这里输入的正确方法是什么?

【问题讨论】:

    标签: typescript sequelize.js


    【解决方案1】:

    只需像这样扩展现有模型

    interface IExtendedSalesModel extends SalesModel {
        sales_num: number;
        sales_value: number;
    }
    
    ...
    
    
    const results: IExtendedSalesModel = await SalesModel.findAll({
            attributes: [
                'partnerId',
                'status',
                [Sequelize.fn('count', Sequelize.col('value')), 'sales_num'],
                [Sequelize.fn('sum', Sequelize.col('value')), 'sales_value'],
            ],
            group: ['partnerId', 'status'],
            raw: true
        })
    

    【讨论】:

    • 在这种情况下,我收到以下错误:const 结果:IExtendedSalesModel 类型“SalesModel[]”缺少“IExtendedSalesModel”类型中的以下属性:sales_num、sales_value、date、partnerId 和 35更多.ts(2740)
    • 我可以做到:const results = await SalesModel.findAll(..) as IExtendedSalesModel[],但是我失去了类型检查的所有好处。
    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 2022-09-30
    • 2019-03-27
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    相关资源
    最近更新 更多