将 Sequelize.Instance 与 Sequelize v5 和 Typescript 结合使用

eGl*_*Glu 5 sequelize.js typescript

在大多数指南、聊天、教程等中……输入 Sequelize 模型的推荐方法是使用以下代码:

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

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

Namespace '".../node_modules/sequelize/types/index"' has no exported member 'Instance'.
Run Code Online (Sandbox Code Playgroud)

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

** 查看本指南,“sequelize.define 的使用”部分 http://docs.sequelizejs.com/manual/typescript

在使用定义和打字稿时,似乎没有一种明确的方法来处理关联。

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

参考:

问候,埃米尔

Ast*_*ton 2

我搜索了很多这个问题的解决方案,并使其与以下内容一起工作:

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;
Run Code Online (Sandbox Code Playgroud)