Sequelize-typescript: Using offset along with limit in include options gives compilation error. But query works if I add ts-ignore to it

Created on 4 Jan 2021  路  4Comments  路  Source: RobinBuschmann/sequelize-typescript

Versions

  • sequelize: 5.21.12
  • sequelize-typescript: 1.1.0
  • typescript: 3.9.5

I'm submitting a ...

[ ] bug report
[ ] feature request

Actual behavior:

It gives compilation error with message property does not exist on typeof Model | IncludedOptions etc

Expected behavior:

It should not give compilation error as query which is created works as expected.

Steps to reproduce:

  1. Create 2 Models eg: Team, Player
  1. Association Team hasMany Players.

  2. Fetch Team and its players.

Related code:

// Two models eg:
Team, Player

Team.hasMany(Players);

// Fetch team and its players let's say I want to apply pagination on players array.

// Query will be
Team.findOne({
  where: { id: 1 },
  include: [
  { model: Player, limit: 5, offset: 0 } // using offset here gives compile error 
  ]
})

Workaround
Add @ts-ignore-next-line before the offset property.

bug

All 4 comments

Thanks a lot, guys, for this package!
I have a similar error with offset property inside deep include.
The following code worked before the project was typescripted.
Please give me suggestions of how can I fix it?

package.json:

  • sequelize-typescript: ^2.0.0-beta.1
  • sequelize-cli-typescript: ^3.2.0-c
  • sequelize: ^6.3.3
  • sequelize-cli: ^6.2.0
  • sequelize-mysql-timestamp: ^1.4.0

code:

let teamEvent = await TeamEventModel.findOne({
    where: {url_code},
    include: [{
        Event: EventModel,
        include: [{
            Game: GameModel,
            include: [{
                model: PartModel,
                order: [['order', 'ASC']],
                limit: 1,
                offset: 1,
            }]
        }]
    }]
});

error:

TS2769: No overload matches this call. 聽聽
Overload 1 of 2, '(this: ModelStatic<TeamEventModel>, options: NonNullFindOptions<any>): Promise<TeamEventModel>', gave the following error. 聽聽聽
Type '{ model: typeof PartModel; order: [string, string][]; limit: number; offset: number; }' is not assignable to type 'Includeable'. 聽聽聽聽聽聽
Object literal may only specify known properties, and 'offset' does not exist in type 'typeof Model | Association<Model<any, any>, Model<any, any>> | IncludeOptions | { all: true; nested?: true | undefined; }'. 聽聽
Overload 2 of 2, '(this: ModelStatic<TeamEventModel>, options?: FindOptions<any> | undefined): Promise<TeamEventModel | null>', gave the following error. 聽聽聽聽
Type '{ model: typeof PartModel; order: [string, string][]; limit: number; offset: number; }' is not assignable to type 'Includeable'. 聽聽聽聽聽聽
Object literal may only specify known properties, and 'offset' does not exist in type 'typeof Model | Association<Model<any, any>, Model<any, any>> | IncludeOptions | { all: true; nested?: true | undefined; }'.

@ezalivadnyi Add @ts-ignore-next-line before the offset it will execute the query properly. Typings are not updated for offset property in include query.

Hey, is it still the case with [email protected] and [email protected] ? @zebkailash

There is not offset in Include option if you go inside the sequelize package.
Some of people speak about this issue here.
I have submitted an issue in sequelize repository 馃憣馃徏

Was this page helpful?
0 / 5 - 0 ratings

Related issues

mikew picture mikew  路  4Comments

lilling picture lilling  路  4Comments

JustGreg picture JustGreg  路  4Comments

fareshan picture fareshan  路  3Comments

ghost picture ghost  路  5Comments