我正在使用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
任何帮助将不胜感激。预先感谢您的宝贵时间。
马克西姆
答案 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}
或执行更高级的解析以将限制查询参数转换为您认为合适的数字