【问题标题】:Merging two classes合并两个类
【发布时间】:2021-08-22 10:35:48
【问题描述】:

我有两节课。

UserDto

export class UserDto {
  name: string;
}

AuthDto

export class AuthDto {
    email: string;
    password: string;
}

我想创建一个RegistrationDto 的类,这将是这两个类的合并。

我试过这样做

export class RegisterDto extends UserDto, AuthDto {}

但这仅适用于接口。我将它用作Nestjs dtos,所以如果我以错误的方式思考它,请告诉我。

在这种情况下我该如何处理这些类?

【问题讨论】:

  • 这些类是从哪里来的?为什么不把它们变成接口呢?
  • 类似于我今天早上打来的一个问题。我从这里得到了解决方案。 stackoverflow.com/a/26961710/8015757。另外,前段时间我问了一个类似的问题。我想今天每个人都有同样的问题。大声笑
  • 嗯。有趣的。 @ChrisG 嗯。好点子。不知道 Nest 接受接口。谢谢!您可以将其添加为答案,因此如果您愿意,我可以选择最好的。除非这种方法有一些缺点

标签: javascript node.js typescript nestjs


【解决方案1】:

您可以将AuthDto 扩展为UserDto,反之亦然:

export class AuthDto extends UserDto {
    email: string;
    password: string;
}

然后这样做:

export class RegisterDto extends AuthDto {}

只是一个建议

【讨论】:

    【解决方案2】:

    为什么不将它们合并到一个新的类中:

    export class RegisterDto{
        authDto: AuthDto;
        userDto: UserDto;
    }
    

    【讨论】:

    • 这种作品。但是我不得不弄乱 Nest 的正文内容。还是我错了?
    【解决方案3】:

    您可以使用 Intersection Type 将两个 DTO 合并为一个

    import { IntersectionType } from '@nestjs/swagger';
    
    export class RegisterDto extends IntersectionType(
      AuthDto,
      UserDto,
    ) {}
    

    参考:https://docs.nestjs.com/openapi/mapped-types#intersection

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 2012-08-16
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多