#typescript #inheritance #nestjs #decorator #typeorm
Вопрос:
В моем приложении NestJS я хотел бы создать BaseEntity
класс, который будет расширяться каждой сущностью. Я придумал следующий класс:
export class BaseEntity { @ApiProperty({ example: 'c057cc8c-ad1b-4081-ba05-41a648e29f19' }) @PrimaryGeneratedColumn('uuid') id: string; @ApiProperty({ example: '2021-07-23T16:23:17 00:00' }) @Column({ nullable: true }) archivedAt: UTC; @ApiProperty({ example: '2021-07-23T16:23:17 00:00' }) @Column({ nullable: false }) createdAt: UTC; constructor(partial: Partiallt;BaseEntitygt;) { Object.assign(this, partial); } }
Но когда я пытаюсь расширить этот класс следующим образом:
@Entity() export class Book extends BaseEntity { @ApiProperty({ example: 'Harry Potter' }) @Column({ nullable: false }) title: string constructor(partial: Partiallt;Bookgt;) { super(); Object.assign(this, partial); } }
Я получаю сообщение об ошибке:
MissingPrimaryColumnError: Entity "Book" does not have a primary column. Primary column is required to have in all your entities. Use @PrimaryColumn decorator to add a primary column to your entity.
Похоже, что декораторы не наследуются, поэтому основной столбец отсутствует (как и все остальные поля). У вас есть какие-либо другие идеи о том, как создать BaseEntity
класс? Ценю вашу помощь 🙂
Комментарии:
1. это странно. Я использую тот же шаблон. У меня есть базовый класс
@PrimaryColumn()
, который работает так, как ожидалось2. @MicaelLevi Спасибо, что указали, что это отлично работает для вас. Оказалось, что я импортировал
BaseEntity
класс изtypeorm
вместо того, который я создал. Глупая ошибка, спасибо 🙂