TypeORM:无法读取未定义的属性“id”

Dat*_*ran 2 migration typescript typeorm

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

表示例.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;

}
Run Code Online (Sandbox Code Playgroud)

表示例.interface.ts

export interface TableExampleInterface{
    id? : string;
}
Run Code Online (Sandbox Code Playgroud)

迁移文件

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');
    }

}
Run Code Online (Sandbox Code Playgroud)

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

Error during migration run:
TypeError: Cannot read property 'id' of undefined
    at new TableExampleEntity (...\src\entities\TableExample.entity.ts:17:34)
    at EntityMetadata.create (...\src\metadata\EntityMetadata.ts:524:19)
    at EntityMetadataValidator.validate (...\src\metadata-builder\EntityMetadataValidator.ts:112:47)  
    at ...\src\metadata-builder\EntityMetadataValidator.ts:45:56
    at Array.forEach (<anonymous>)
    at EntityMetadataValidator.validateMany (...\src\metadata-builder\EntityMetadataValidator.ts:45:25)
    ...
Run Code Online (Sandbox Code Playgroud)

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

Uro*_*lić 5

来自typeorm 文档:

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

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