egg-sequelize的 typescript 模型定义,你们是怎么优雅实现的?
发布于 5 年前 作者 abiuDoIT 5887 次浏览 来自 问答

现状

定义好数据库结构后,如果要在自己写一遍定义那得烦死,所以选择用 sequelize-auto 来导出模型. 然而已有模块 egg-sequelize-auto 不支持 typescript 模式.

所以我自己实现了一个 egg-sequelize-auto-ts

示例

安装执行后,在指定文件夹生成对应 ts. 如 user 表对应 user.ts

/* jshint indent: 2 */
// tslint:disable
import { DataTypes } from 'sequelize';
module.exports = function(app) {
  return app.model.define('user', {
    'user_id': {
      type: DataTypes.INTEGER,
      allowNull: false,
      primaryKey: true
    },
    'user_name': {
      type: DataTypes.STRING(255),
      allowNull: true
    },
    'password': {
      type: DataTypes.STRING(255),
      allowNull: true
    },
    'note': {
      type: DataTypes.TEXT,
      allowNull: true
    }
  }, {
    tableName: 'user'
  });
};

所有的 ts 声明在 index.d.ts

// tslint:disable
import * as Sequelize from '@types/sequelize';


// table: user
export interface userAttribute {
  user_id:number;
  user_name?:string;
  password?:string;
  note?:string;
}
export interface userInstance extends Sequelize.Instance<userAttribute>, userAttribute { }
export interface  userModel extends Sequelize.Model<userInstance, userAttribute> { }

declare module 'egg' {
  interface Context {
    model: Sequelize.Sequelize & {
      User: userModel,
      Eshop: eshopModel,

    }
  }
  interface Application {
    model: Sequelize.Sequelize & {
      User: userModel,
      Eshop: eshopModel,

    }
  }
}
  

已知不足

  1. index.d.ts 里我用的是 @types/sequelize 而不是 sequelize,因为后者不支持我这种写法,所以还得安装 @types/sequelize 模块.

  2. 不能根据 config 里的配置直接生成.

大佬们是如何实现数据模型的 ts 定义的呢?😳

4 回复

ts只用了typeorm

typeorm 更好用 + 1

@joucksHua @zuohuadong 你们用的是 nestjs或 midway 框架吧😂

回到顶部