typescript 在TypeORM-NestJS中扩展多个实体

8oomwypt  于 2023-03-04  发布在  TypeScript
关注(0)|答案(2)|浏览(166)

嗨,我不想一直添加公共列到所有实体。所以我想写它在单独的类,并扩展到那些需要这些列。我尝试了一些东西,但它是抛出“类只能扩展一个类”错误
我没有太多的手在TS上,我是新的TS。有人能帮我吗?
请查找以下代码:
1.基础实体

import { Entity, PrimaryGeneratedColumn } from "typeorm";

@Entity()
export class BaseModel {
  @PrimaryGeneratedColumn("uuid")
  id: string;
}

1.审计实体

import { CreateDateColumn, DeleteDateColumn, Entity, UpdateDateColumn } from "typeorm";

@Entity()
export class AuditModel {
    @CreateDateColumn()
    created!: Date;

    @UpdateDateColumn()
    updated!: Date;

    @DeleteDateColumn()
    deletedAt?: Date;
}

3.用户实体

import { AuditModel } from 'src/baseModels/auditEntity';
import { BaseModel } from 'src/baseModels/baseEntity';
import {
  Entity,
  Column
} from 'typeorm';

@Entity()
export class Users extends BaseModel,AuditModel {

  @Column({ unique: true })
  email: string;

  @Column({ nullable: false })
  name: string;

  @Column({default:false})
  isActive:boolean

  @Column({ select: false })
  password: string;

}
fnvucqvd

fnvucqvd1#

与其他语言不同,JavaScript不允许扩展多个类(单继承)。
我建议让您的AuditModel扩展BaseModel:

export class AuditModel extends BaseModel {
    @CreateDateColumn()
    created!: Date;

    @UpdateDateColumn()
    updated!: Date;

    @DeleteDateColumn()
    deletedAt?: Date;
}

然后,您的用户模型只需扩展AuditModel:

@Entity()
export class Users extends AuditModel {

  @Column({ unique: true })
  email: string;

  @Column({ nullable: false })
  name: string;

  @Column({default:false})
  isActive:boolean

  @Column({ select: false })
  password: string;

}

不要对不在数据库中的类使用@Entity!

frebpwbc

frebpwbc2#

这是Typescript中的一个限制。你不能扩展一个以上的类,主要原因是如果你调用super.property,你调用的是哪个super?你可以创建某种mixin,它可以接受任意数量的类,并将它们应用到你当前构建的类的原型中,但这可能会导致不必要的复杂,而收效甚微

相关问题