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

Chr*_* S. 1 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;
}
Run Code Online (Sandbox Code Playgroud)

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,属性名称)); ^

TypeError: Reflect.getMetadata is not a function at C:\Users\Chris\Documents\TypeORM - Kopie (2)\node_modules\typeorm\decorator\columns\PrimaryColumn.js:20:76 at __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) at Module._compile (module.js:541:32) at Object.Module._extensions..js ( module.js:550:10) at Module.load (module.js:456:32) at tryModuleLoad (module.js:415:12) at Function.Module._load (module.js:407:3) at Module。 require (module.js:466:17) at require (internal/module.js:20:19) 当我删除创建新实例的行时,一切又好了。我曾尝试使用不同的 PrimaryKey 装饰器,例如@PrimaryColumn("int", { generated: true }),但这无济于事。

编辑:我的 tsconfig.json: { "version": "2.1", "compilerOptions": { "lib": [ "es5", "es6" ], "target": "es5", "module": "commonjs" , "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, "sourceMap": true, "typeRoots": [ "node_modules/@types" ] }, "exclude": [ "node_modules" ] }

非常感谢。

ple*_*ock 8

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

"emitDecoratorMetadata": true,
"experimentalDecorators": true
Run Code Online (Sandbox Code Playgroud)

还要确保在使用 orm 的任何代码之前导入了反射元数据垫片:

import "reflect-metadata";
Run Code Online (Sandbox Code Playgroud)

  • 需要注意的是,导入“reflect-metadata”必须是 index.ts 文件中所有其他导入之前的第一个导入语句。 (2认同)