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

时间:2019-06-25 11:10:02

标签: typescript sequelize.js

在大多数指南,聊天,教程等中,建议的键入Sequelize模型的方法是使用以下代码:

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

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

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

我环顾四周,但没有找到解决方法。

**请参阅本指南的“ sequelize.define的用法”部分 http://docs.sequelizejs.com/manual/typescript

在使用define和typescript时,似乎没有明确的方法来处理关联。

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

参考文献:

关于, 埃米尔

1 个答案:

答案 0 :(得分:0)

我在这个问题上进行了很多搜索,找到了解决方案,并使其适用于以下情况:

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;