import { Sequelize, DataTypes, Optional, Model } from "sequelize" interface UserAttributes { id: number; username: string; password: string; nickname: string; email: string; createdAt?: Date; updatedAt?: Date; deletedAt?: Date; } export interface UserInput extends Optional { } export interface UserOuput 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; // timestamps! public readonly createdAt!: Date; public readonly updatedAt!: Date; public readonly deletedAt!: Date; } User.init({ id: { type: DataTypes.INTEGER.UNSIGNED, 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, } }, { sequelize, timestamps: true, paranoid: true // 对模型施加了一个软删除 }) // 覆盖User的toJSON方法 interface User{ toJSON: ()=> UserOuput } return User };