egg-sequelize的 typescript 模型定义,你们是怎么优雅实现的?
现状
定义好数据库结构后,如果要在自己写一遍定义那得烦死,所以选择用 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,
}
}
}
已知不足
-
index.d.ts
里我用的是@types/sequelize
而不是sequelize
,因为后者不支持我这种写法,所以还得安装@types/sequelize
模块. -
不能根据 config 里的配置直接生成.
大佬们是如何实现数据模型的 ts 定义的呢?😳
4 回复
ts只用了typeorm
typeorm 更好用 + 1
@joucksHua @zuohuadong 你们用的是 nestjs或 midway 框架吧😂
@abiuDoIT nest.js