我不明白为什么我会在ts-jest和sequelize中遇到此错误

时间:2020-06-30 16:06:11

标签: typescript jestjs sequelize.js

我正在使用nodeJs,TypeScript,Sequelize和jest(ts-jest)开发API,但我肯定会理解一个错误。

我有以下代码:

router.get('/hotels', async (req, res) => {
 try {
  const hotels = await Hotel.findAll({
    include: [
      {
        model: Visit,
      },
      {
        model: Sector,
      },
    ],
    ...(req.query.limit && { limit: req.query.limit }),
    order: [
      ['name', 'ASC'],
      [Visit, 'date', 'ASC NULLS FIRST'],
    ],
  });
  res.send(hotels);
} catch (error) {
  res.status(404).send({ error });
}

});

但是当我运行命令“笑话”时,会显示此错误:

 app/routes/hotel.ts:33:40 - error TS2345: Argument of type '{ order: ([string, string] | [typeof Visit, string, string])[]; include: ({ model: typeof Visit; } | { model: typeof Sector; })[]; } | { order: ([string, string] | [typeof Visit, string, string])[]; include: ({ ...; } | { ...; })[]; } | { ...; }' is not assignable to parameter of type 'FindOptions | undefined'.
  Type '{ order: ([string, string] | [typeof Visit, string, string])[]; limit: string | QueryString.ParsedQs | string[] | QueryString.ParsedQs[]; include: ({ model: typeof Visit; } | { ...; })[]; }' is not assignable to type 'FindOptions'.
    Types of property 'limit' are incompatible.
      Type 'string | ParsedQs | string[] | ParsedQs[]' is not assignable to type 'number | undefined'.
        Type 'string' is not assignable to type 'number | undefined'.

 33     const hotels = await Hotel.findAll({
                                           ~
 34       include: [
    ~~~~~~~~~~~~~~~~
... 
 46       ],
    ~~~~~~~~
 47     });
    ~~~~~

它认为ts-jest似乎无法理解的类型存在问题。如果您询问我,我可以提供更多详细信息。

我正在使用jest ^ 25.5.4,ts-jest ^ 25.5.1和Sequelize

任何帮助将不胜感激。预先感谢您的宝贵时间。

马克西姆

1 个答案:

答案 0 :(得分:2)

我对堆栈不熟悉,但是看起来它知道req.query.limit的类型是字符串,并且这些方法期望limit prop是数字。

如果您确定req.query.limit是一个数字,则可以替换:

...(req.query.limit && { limit: req.query.limit }),

使用

{limit: req.query.limit ? Number(req.query.limit) : null}

或执行更高级的解析以将限制查询参数转换为您认为合适的数字