类型ORM:无法读取未定义的属性'id'



我尝试在TypeORM中使用迁移,如下所示:

TableExample.entity.ts

@Entity({ name: 'table_example' })
export class TableExampleEntity {
constructor(properties : TableExampleInterface) {
this.id = properties.id;
}
@PrimaryColumn({
name: 'id',
type: 'uuid',
generated: 'uuid',
default: 'uuid_generate_v4()',
})
id? : string;
}

TableExample.interface.ts

export interface TableExampleInterface{
id? : string;
}

迁移文件

import {MigrationInterface, QueryRunner, Table} from 'typeorm';
export class createSongEntities1591077091789 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(new Table({
name: 'table_example',
columns: [
{
name: 'id',
type: 'uuid',
generationStrategy: 'uuid',
default: 'uuid_generate_v4()',
isPrimary: true,
},
],
}));
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropTable('table_example');
}
}

运行迁移时,节点服务器引发此错误 堆栈跟踪

Error during migration run:
TypeError: Cannot read property 'id' of undefined
at new TableExampleEntity (...srcentitiesTableExample.entity.ts:17:34)
at EntityMetadata.create (...srcmetadataEntityMetadata.ts:524:19)
at EntityMetadataValidator.validate (...srcmetadata-builderEntityMetadataValidator.ts:112:47)  
at ...srcmetadata-builderEntityMetadataValidator.ts:45:56
at Array.forEach (<anonymous>)
at EntityMetadataValidator.validateMany (...srcmetadata-builderEntityMetadataValidator.ts:45:25)
...

这里有什么问题?请帮帮我!

来自 typeorm 文档:

使用实体构造函数时,其参数必须是可选的。由于ORM在从数据库加载时创建实体类的实例,因此它不知道您的构造函数参数。

在您的情况下发生的情况是 typeorm 正在创建实体的实例,并且不会在构造函数中传递任何内容。所以properties参数是undefined.

最新更新