首页 > 解决方案 > 打字稿 - 续集:无法使用模型

问题描述

我尝试将 Sequelize 与 TypeScript 一起使用,但我无法使其正常工作。我尝试了很多在互联网上看到的东西,但在我的情况下没有任何效果。

这是我的模型/index.ts

import { Sequelize } from 'sequelize';
import config from '../config'

const env = process.env.NODE_ENV || 'development';

const db = config[env]
const sequelize = db.url
  ? new Sequelize(db.url, db)
  : new Sequelize(db.database, db.username, db.password, db);

export { Sequelize, sequelize };

(如果我记得清楚的话,在 ts sequelize 样板中的某个地方看到过)

这是一个模型定义

import {
  Model,
  Optional,
} from 'sequelize'

export interface ScreenAttributes {
  id: number
  title: string
  deletedAt?: Date
}

interface ScreenCreationAttributes extends Optional<ScreenAttributes, "id"> {}

export class Screen extends Model<ScreenAttributes, ScreenCreationAttributes>
  implements ScreenCreationAttributes {
  public id!: number
  public title!: string
  public deletedAt?: Date
  
  public readonly createdAt!: Date;
  public readonly updatedAt!: Date;
  
  static associate(models: any) {
    // Screen.belongsTo(models.User, { targetKey: 'id' })
  }
}

module.exports = (sequelize: any, DataTypes: any) => {
  Screen.init({
    id: {
      type: DataTypes.INTEGER.UNSIGNED,
      autoIncrement: true,
      primaryKey: true,
    },
    title: {
      type: new DataTypes.STRING(128),
      allowNull: false,
    },
    deletedAt: {
      type: DataTypes.DATE,
      allowNull: true,
    },
  }, {
    sequelize,
    tableName: 'Screens',
  })
  return Screen
}


export default Screen

这是我如何使用它

import Screen from '../db/models/screen'

Screen.create({
  title: req.body.title || 'Untitled',
}).then(screen => {
  return res.status(200).json(screen)
}).catch((error: Error) => console.log(error))

但是当 Screen.create 被调用时,我有一个TypeError: screen_1.default.create is not a function,但我的 IDE 设法解析方法,甚至我的模型的类型。

那么有什么问题和/或我在哪里可以找到一个真正好的样板,用于带有 TS 和 Sequelize 的快速应用程序,我查看了 Sequelize 文档,但我发现它有点混乱,而且他们没有为模型导出 (db/models/index.ts)

谢谢

标签: typescriptexpresssequelize.js

解决方案


推荐阅读