[sequelize-cli] typescriptで使いたい!
5708 ワード
sequelizeを使う時はcliでマイグレーションすることが多いと思いますが、出力されるファイルはjsです。イケてないですね(諸説)
sequelize-cli-typescript という素晴らしいモジュールもありますが、最終更新が2年前なので惜しいです。
とりあえず model を作成する
npx sequelize-cli init
こうなる
|- models
|- migrations
|- seeders
|- config
npx sequelize-cli model:generate --name member --attributes name:string --underscored
id, name を持つ member モデルが作成されます。ついでにindex.jsも。
'use strict';
module.exports = (sequelize, DataTypes) => {
const member = sequelize.define('member', {
name: DataTypes.STRING
}, {
underscored: true,
});
member.associate = function(models) {
// associations can be defined here
};
return member;
};
オプション
- underscored: 自動生成の created_at
・updated_at
がスネークケースになります。
型定義をつける
公式documentの typescript を読むと、
- class
- .define
のどちらかを使う必要がありそうです。生成されたものが define なので、それに合わせた型定義ファイルを作成します。
階層
models
|- index.js
|- member.js
|- index.d.ts <-作成
import { Model, BuildOptions } from 'sequelize';
/* モデルの数作成する */
interface MemberModel extends Model {
readonly id: number;
name: string;
readonly created_at: date;
readonly updated_at: date;
}
type MemberModelStatic = typeof Model & {
new (values?: object, options?: BuildOptions): MemberModel;
}
/* --------------- */
interface DBModel {
member: MemberModelStatic;
}
declare const db: DBModel;
export = db;
こうすることで、index.js で module.exports
されている db に型定義がつきます。
※ DBModel
のキーはモデル名と同一にする必要があります。
使う
find
や create
などの補完が出てくれます。
ただし、find
系の返り値が any
になります。(死)
嫌な人は class の書き方か、typeorm を使おう。
Author And Source
この問題について([sequelize-cli] typescriptで使いたい!), 我々は、より多くの情報をここで見つけました https://qiita.com/taittide/items/a1113e223b306c54cbad著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .