ウェブサイト検索

モデル - Sequelizeで関連エンティティにアクセスするTypeScript互換の方法はありますか?


私はSequelizeを実行するTypeScriptアプリケーションを開発しています。これは最小限の例のモデルです:

import * as Sequelize from 'sequelize';

export interface MyAttribute {
    id: number,
    descr: string
}

export interface MyInstance extends Sequelize.Instance<MyAttribute>, MyAttribute { }

export interface MyModel extends Sequelize.Model<MyInstance, MyAttribute> { }

export default class MyManager {

    //[...]

    constructor() {

        this.model = this.sequelize.define<MyInstance, MyAttribute>("MyEntity", {
            id: {
                type: Sequelize.INTEGER,
                primaryKey: true,
                autoIncrement: true
            },
            descr: {
                type: Sequelize.INTEGER
            }
        });
    }

    public initRelations() {
        this.model.belongsTo(OtherModel.model);
        this.model.sync({force:true});
    }
}

今、MyInstanceオブジェクトを通じてOtherModelの関連エンティティにアクセスしたいです。getOtherModels() を試しましたが、TypeScriptのコンパイル時にはこれは有効ではありません。TypeScript環境で関連エンティティやそのプロパティにアクセスできる他の方法はありますか?

どんな助けでもありがとう。

回答 #1

Sequelize は、オブジェクトに getOtherModels のようなメソッドを実行時に追加するので、Typescript に対して、これらのメソッドが実行時に MyModel のインスタンスに存在することを伝えるだけで、それらを使用できるようになります。

export interface MyInstance extends Sequelize.Instance<MyAttribute>, MyAttribute { 
    getOtherModels(): Promise<OtherModel[]>
}