创建实体实例会导致Reflect.getMetadata不是一个函数

时间:2016-12-17 21:27:55

标签: typescript typeorm

我开始使用typeorm。我创建了一些实体:

@Table()
export class User {
@PrimaryColumn()
name: string;
@Column()
passwordHash: string;
@OneToMany(type => Sprint, sprint => sprint.scrumMaster)
sprints: Sprint[];
@OneToMany(type => BacklogItem, item => item.assignedTo)
assignments: BacklogItem[];
@OneToMany(type => BacklogItem, item => item.createdBy)
createdItems: BacklogItem[];
}
@Table()
export class Sprint {
@PrimaryGeneratedColumn()
id: number;
@Column("date")
start: Date;
@Column("date")
end: Date;
@ManyToOne(type => User, user => user.sprints)
scrumMaster: User;
@OneToMany(type => BacklogItem, item => item.sprint)
items: BacklogItem[];
@Column()
isFinished: boolean;
}

Typeorm创建数据库(Sqlite)就好了。但是,每当我创建一个我的实体的实例时,例如let = user = new User(),NodeJS会立即崩溃并跟随以下堆栈跟踪:

C:\ Users \ Chris \ Documents \ TypeORM - Kopie(2)\ node_modules \ typeorm \ decorator \ columns \ PrimaryColumn.js:20         var reflectType = ColumnTypes_1.ColumnTypes.typeToString(Reflect.getMetadata(“design:type”,object,propertyName));                                                                            ^

TypeError:Reflect.getMetadata不是函数     在C:\ Users \ Chris \ Documents \ TypeORM - Kopie(2)\ node_modules \ typeorm \ decorator \ columns \ PrimaryColumn.js:20:76     在__decorate(C:\ Users \ Chris \ Documents \ TypeORM - Kopie(2)\ entities \ Sprint.js:5:110)     在对象。 (C:\ Users \ Chris \ Documents \ TypeORM - Kopie(2)\ entities \ Sprint.js:19:1)     在Module._compile(module.js:541:32)     at Object.Module._extensions..js(module.js:550:10)     在Module.load(module.js:456:32)     在tryModuleLoad(module.js:415:12)     在Function.Module._load(module.js:407:3)     在Module.require(module.js:466:17)     at require(internal / module.js:20:19) 当我删除创建新实例的行时,一切都很好。我试图使用不同的PrimaryKey装饰器,如@PrimaryColumn("int", { generated: true }),但这没有帮助。

编辑:我的tsconfig.json:     {     “版本”:“2.1”,     “compilerOptions”:{     “lib”:[“es5”,“es6”],     “目标”:“es5”,     “module”:“commonjs”,     “moduleResolution”:“节点”,     “emitDecoratorMetadata”:是的,     “experimentalDecorators”:是的,     “sourceMap”:是的,     “typeRoots”:[“node_modules / @ types”]     },     “排除”:[     “node_modules”     ]}

提前多多感谢。

2 个答案:

答案 0 :(得分:3)

确保您使用的是TypeScript编译器版本> 2.1并且您已在tsconfig.json中启用了以下设置:

"emitDecoratorMetadata": true,
"experimentalDecorators": true

还要确保在使用orm:

的任何代码之前导入了reflect-metadata填充程序
import "reflect-metadata";

答案 1 :(得分:-1)

示例github.com/typeorm/typescript-example对我来说很好。我现在已将我的整个代码复制到示例项目中,我的问题已经消失。