使用 TypeScript 时,Sequelize 在 findAndCountAll() 中生成错误的 SQL 语句

Sequelize generates wrong SQL statements in findAndCountAll() when using TypeScript

我将以下代码用于使用 expressjs 的 REST 路由,我也在我的项目中使用 TS。

const { limit, skip } = req.query as any;
  let data: {
    count: number;
    rows: Array<Eintragung>;
  };

  try {
    data = await Eintragung.findAndCountAll({
      limit: limit as number,
      order: [['Id', 'DESC']],
    });
  } catch (error) {
    console.error(error);
    return res.status(500).json({ error });
  }

代码的问题是 sequelize 生成了一个 SQL 语句,其限制看起来像这样 LIMIT '25',但在 MySQL/MariaDB 中这不是一个有效的语句,因为 25 应该是数字不是字符串。

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''25'' at line 1

我使用findAll()时出现同样的问题。

如果我像这样将限制硬编码为 25

data = await Eintragung.findAndCountAll({
  limit: 25,
  order: [['Id', 'DESC']],
});

正确生成 SQL 语句并且查询有效。

我想知道我在 TypeScript 上做错了什么,我显然必须将 limit 变量声明为数字,因为 sequelize 只接受数字作为限制。

我正在使用 sequelize 6.3.5 和 MariaDB 10.3.27

通过将 limit 变量包装在 parseInt() 中来修复它,如下所示:

data = await Eintragung.findAndCountAll({
   limit: parseInt(limit),
   order: [['Id', 'DESC']],
});