Sequelize-Typescript无法初始化MySQL模型:类型错误求助
问题
尝试使用Sequelize和Sequelize-Typescript将Node.js TypeScript项目连接到MySQL数据库时,无法初始化数据库模型,启动项目抛出如下错误:
TypeError: Cannot convert undefined or null to object at Function.getOwnPropertyDescriptor (<anonymous>) at /home/janneck/WebstormProjects/SchoolService/node_modules/sequelize-typescript/dist/model/column/column.js:18:131 at __esDecorate (/home/janneck/WebstormProjects/SchoolService/dist/models/documentType.model.js:13:40) at /home/janneck/WebstormProjects/SchoolService/dist/models/documentType.model.js:67:9 at /home/janneck/WebstormProjects/SchoolService/dist/models/documentType.model.js:73:7 at Object.<anonymous> (/home/janneck/WebstormProjects/SchoolService/dist/models/documentType.model.js:75:3) at Module._compile (node:internal/modules/cjs/loader:1376:14) at Module._extensions..js (node:internal/modules/cjs/loader:1435:10) at Module.load (node:internal/modules/cjs/loader:1207:32) at Module._load (node:internal/modules/cjs/loader:1023:12)
模型定义代码:
import { Column, DataType, Model, Table } from "sequelize-typescript"; @Table({ tableName: "DocumentType" }) class DocumentType extends Model { @Column({ type: DataType.STRING, primaryKey: true }) public documentTypeId: string; @Column(DataType.STRING) public name: string; } export default DocumentType;
项目原本包含多个模型,单独初始化该模型(无关联其他模型)仍失败。使用的依赖版本:
"sequelize": "^6.37.1", "sequelize-typescript": "^2.1.6"
解决方案
- 检查TypeScript编译配置:确保
tsconfig.json中开启experimentalDecorators: true和emitDecoratorMetadata: true,这两个是sequelize-typescript正常工作的必要配置。 - 清理编译产物后重新构建:删除项目中的
dist目录,重新执行tsc编译,避免旧编译文件干扰。 - 调整版本兼容性:尝试升级sequelize-typescript到
2.1.7,或降级sequelize到6.36.0,部分版本组合存在隐性兼容问题。 - 完善模型装饰器配置:给
@Column的配置对象显式添加allowNull字段,比如@Column({ type: DataType.STRING, primaryKey: true, allowNull: false }),避免装饰器处理空值时出错。 - 确认模型加载路径:初始化Sequelize实例时,检查
models配置的路径是否正确,确保模型文件被正确识别和加载。
内容的提问来源于stack exchange,提问作者ntdoJanneck
相关产品推荐
相关产品推荐

