将 Sequelize.Instance 与 Sequelize v5 和 Typescript 一起使用



在大多数指南,聊天,教程等中...键入续集模型的推荐方法是使用以下代码:

export interface IUserInstance extends Sequelize.Instance<IUserAttributes>, IUserAttributes {
  prototype: {
    verifyPassword: (password: string) => boolean;
  };
}

这里的关键部分是 Sequelize.Instance<,在续集v5 中,您会看到错误:

Namespace '".../node_modules/sequelize/types/index"' has no exported member 'Instance'.

我已经环顾四周,但没有遇到解决方案。

**查看本指南,"使用semelize.define"部分http://docs.sequesleizejs.com/manual/typescript

似乎没有一种清晰的方式与使用Define和Typescript合作。

任何帮助/建议将不胜感激。

参考:

  • https://github.com/definitelytyped/definitelytyped/issues/35013
  • https://github.com/sequelize/sequelize/sissues/9760#issuecomment-472905585
  • https://vivacitacelabs.com/setup-typescript-sequelize/

问候,emir

我经常搜索了解决此问题的解决方案,并与以下内容一起使用:

import sequelizeInstance from '..';
import { Model, DataTypes } from 'sequelize';
const config = {
  tableName: 'User',
  sequelize: sequelizeInstance,
};
class User extends Model {
  id!: number;
  firstName!: string;
  lastName!: string;
  /* some other properties*/
  verifyPassword: (password: string) => boolean;
  public readonly createdAt!: Date;
  public readonly updatedAt!: Date;
}
User.init(
  {
    id: {
      primaryKey: true,
      type: DataTypes.INTEGER,
      autoIncrement: true,
    },
    firstName: {
      type: DataTypes.STRING,
    },
    lastName: {
      type: DataTypes.STRING,
    }
  },
  config,
);
User.prototype.verifyPassword = function(password: string) {
  /* code here ... */
};
export default User;

最新更新