import { Sequelize, DataTypes, Optional, Model } from "sequelize" interface UserAttributes { id: number username: string password: string nickname: string email: string avatar: string tel: string createdAt?: Date updatedAt?: Date deletedAt?: Date } export interface UserInput extends Optional { } export interface UserOutput extends Required { } export type TUserModel = ReturnType type DT = typeof DataTypes export default function UserModel(sequelize: Sequelize, DataTypes: DT) { class User extends Model implements UserAttributes { public id!: number public username!: string public password!: string public nickname: string public email: string public avatar: string public tel: string // timestamps! public readonly createdAt!: Date public readonly updatedAt!: Date public readonly deletedAt!: Date } User.init( { id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true, }, username: { type: DataTypes.STRING, allowNull: false, }, password: { type: DataTypes.STRING, allowNull: false, }, nickname: { type: DataTypes.STRING, allowNull: false, }, email: { type: DataTypes.STRING, }, avatar: { type: DataTypes.STRING, }, tel: { type: DataTypes.STRING, }, }, { modelName: "user", sequelize, underscored: true, deletedAt: true, timestamps: true, paranoid: true, // 对模型施加了一个软删除 }, ) // 覆盖User的toJSON方法 User.prototype.toJSON = function () { const values = Object.assign({}, this.get()) as UserAttributes delete values.password delete values.deletedAt return values } User.associate = function (models) { } return User }