typescript - 在 TypeScript 和 NestS 中将类转换为类/对象(实体到 DTO)

标签 typescript nestjs class-validator class-transformer

如何转换数据库实体User :

class User {
  public firstName: string;
  public lastName: string;
  public phone?: string;
  public email: string;
  public status: EUserState;
  public tokens: Token[];
  public password: string;
}


进入DTO实体GetUserDTO :
class GetUserDTO {
  public id: number;
  public firstName: string;
  public lastName: string;
  public phone?: string;
  public email: string;
}

在 typescript 中?我正在使用 @nestjs , class-validatorclass-transformer包,但我没有找到任何方法来使用它们来实现这一点。

有人可能会说,拥有 DTO 对此毫无意义,但我们在服务器和客户端之间共享 DTO 以维护 API 结构。

有任何想法吗?

最佳答案

有几种方法可以实现您想要的

  • 您可以从 Domain 手动映射型号到 DTOs使用 static来自 Domain 的函数或 DTO

  • export class Domain {
       ...
       static toDTO(domain: Domain) {
          // mapping goes here
       }
    }
    

    或者

    export class Dto {
       ...
       static fromDomain(domain: Domain) {
          // mapping goes here
       }
    }
    
  • 您可以使用第三方库:automapper-ts , @wufe/mapper , @nartc/automapper (我的库),或 morphism
  • class-transformer也可以被认为是一个映射器,但是,如果你想从一个模型映射到另一个模型,那么 class-transformer真的不能那样做。

    关于typescript - 在 TypeScript 和 NestS 中将类转换为类/对象(实体到 DTO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60139683/

    相关文章:

    angular - 如何在 Angular 2 应用程序中使用 typescript 显示基于其他下拉值的下拉值

    validation - 如何使用 NestJS 和类验证器手动测试输入验证

    postgresql - 无法搜索 character varying[] 数组列

    typescript - 如何在 Controller 中覆盖全局 ValidationPipe?

    nestjs - 类验证器在 NestJS 应用程序中似乎没有做任何事情

    typescript - TypeORM- findOne 返回意外值

    arrays - typescript - 初始化二维数组错误

    javascript - Angular2 Reactive Forms 禁用表单组中的元素

    javascript - NestJS 共享库

    node.js - NestJS、GraphQL、类验证器 - 在验证方法中访问请求对象