首页 > 解决方案 > Sequelize Model Loader 未检测到模型方法

问题描述

我正在尝试让 sequelize 与 TypeScript 一起工作,我目前有这个按预期工作的模型加载器

import { Account, initAccount } from "./account";
import { initOrder, Order } from "./order";
import { initPrice, Price } from "./price";

import {Sequelize, Model} from 'sequelize';

const env = process.env.NODE_ENV || 'development';
const config = require(`${__dirname}/../../config/config.json`)[env];

interface db {
    Order: Order;
    Account: Account;
    Candle: Candle;
}

const sequelize = new Sequelize(config.database, config.username, config.password, config);

initAccount(sequelize);
initOrder(sequelize);
initPrice(sequelize);

const db = {
    sequelize,
    Sequelize,
    Account: Account,
    Order: Order,
    Price: Price,
}

export default db;

我已经通过这样做将它导入到另一个文件中,import db from './models'但是如果我开始输入db.Order.,我应该得到所有可用 sequelize 方法的列表,但我没有。

我可以使用import {Price} from './models/price';例如导入单个模型,并且可以正常工作。尽管这违背了使用单个模型加载器的目的。

如何更改我的模型加载器以允许它显示我可以从单个函数运行的所有方法?

下面是我的模型定义的一个例子

import {
    Sequelize,
    Model,
    DataTypes,
    Optional,
} from "sequelize";

interface AccountAttributes {
    id?: number;
    accountId: string;
    currency: string;
    balance: number;
}

interface AccountCreationAttributes extends Optional<AccountAttributes, "id"> { }

export class Account extends Model<AccountAttributes, AccountCreationAttributes> implements AccountAttributes {
    public id!: number;
    public accountId!: string;
    public currency!: string;
    public balance!: number;
    
    // timestamps!
    public readonly createdAt!: Date;
    public readonly updatedAt!: Date;

}

export function initAccount(sequelize: Sequelize): void {
    Account.init({
        accountId: DataTypes.INTEGER,
        currency: DataTypes.STRING,
        balance: DataTypes.INTEGER
    }, {
        tableName: 'accounts',
        sequelize: sequelize,
    });
}

更新

所以现在检测到不同的模型方法,但是如果我尝试访问模型的属性,我会收到此错误Property 'currency' does not exist on type 'Model<any, any>'.

我用来尝试访问该currency属性的代码如下

let accountCurrencies: Array<number> = [];
const accounts = await db.Account.findAll({
    limit: 50,
});

for (let i = 0; i < accounts .length; i++) {
    accountCurrencies.push(accounts[i].currency);
}

标签: typescriptsequelize.jstypescript-typingssequelize-typescript

解决方案


推荐阅读