typescriptsequelize.jssequelize-typescript

Unable to add model in sequelize-typescript


I am trying to add a model with sequelize-typescript:


type AppMetaDataAttributes = {
  id: string;
  name: string;
  version: string;
  createdAt: string;
  updatedAt: string;
};

type AppMetaDataCreationAttributes = Optional<AppMetaDataAttributes, 'id'>;

@Table
class AppMetaData extends Model<AppMetaDataAttributes, AppMetaDataCreationAttributes> {
  @Column
  id: string;

  @Column
  name: string;

  @Column
  version: string;

  @Column({ field: 'created_at' })
  createdAt: string;

  @Column({ field: 'updated_at' })
  updatedAt: string;

  constructor(id: string, name: string, version: string, createdAt: string, updated: string) {
    super();
    this.id = id;
    this.name = name;
    this.version = version;
    this.createdAt = createdAt;
    this.updatedAt = updated;
  }
}
MySqlInstance.addModels([AppMetaData]);

export default AppMetaData;

But it is giving me this error in the line MySqlInstance.addModels([AppMetaData]);:

No overload matches this call.
  The last overload gave the following error.
    Type 'typeof AppMetaData' is not assignable to type 'string | ModelCtor<Model<any, any>>'.
      Type 'typeof AppMetaData' is not assignable to type 'ModelCtor<Model<any, any>>'.
        Type 'typeof AppMetaData' is not assignable to type 'new () => Model<any, any>'.
          Types of construct signatures are incompatible.
            Type 'new (id: string, name: string, version: string, createdAt: string, updated: string) => AppMetaData' is not assignable to type 'new () => Model<any, any>'.ts(2769)
sequelize.d.ts(16, 5): The last overload is declared here.

I am only following the documentation provided in the official doc here but not sure what went wrong?


Solution

  • The constructor of the AppMetaData model class is unnecessary.

    Working example:

    import { Optional } from 'sequelize';
    import { Column, Model, Table, Sequelize } from 'sequelize-typescript';
    
    const sequelize = new Sequelize({
      database: 'some_db',
      dialect: 'sqlite',
      username: 'root',
      password: '',
      storage: ':memory:',
      models: [__dirname + '/models'],
    });
    
    type AppMetaDataAttributes = {
      id: string;
      name: string;
      version: string;
      createdAt: string;
      updatedAt: string;
    };
    
    type AppMetaDataCreationAttributes = Optional<AppMetaDataAttributes, 'id'>;
    
    @Table
    class AppMetaData extends Model<
      AppMetaDataAttributes,
      AppMetaDataCreationAttributes
    > {
      @Column
      id: string;
    
      @Column
      name: string;
    
      @Column
      version: string;
    
      @Column({ field: 'created_at' })
      createdAt: string;
    
      @Column({ field: 'updated_at' })
      updatedAt: string;
    }
    sequelize.addModels([AppMetaData]);
    

    stackblitz