首页 > 解决方案 > NestJS 映射类型和 DTO 使用

问题描述

我对 NestJS 中的映射类型感到困惑。

文档说创建一个新类,PartialType使其验证装饰器是可选的。

因此,我们在验证管道中使用它,就像使用原始类一样。

我想知道这是否是派生类的正常用法。我的意思是,使创建部分更新 DTO 变得容易。

如果是这样,为什么它在一个 swagger 包(或 graphql)中而不是在核心的 utils 中?

标签: nestjsnestjs-swagger

解决方案


所以,mapped-typesNest 实际上有 3 个: base @nestjs/mapped-types、 one in@nestjs/swagger和 one in @nestjs/graphql。这些包的原因是允许开发人员定义一个基类,然后能够定义扩展该基类但使用不同装饰器进行验证/模式定义的类。这些 mixin 方法变得很有用,因为它们读取类上的现有元数据并为生成的类对其进行修改,例如使每个属性都是可选的,或者省略关键属性,例如类password上的字段User

@nestjs/mapped-types包处理元数据class-validatorclass-transformer是其他两个包的基础。如果元数据不存在,则元数据不会受到任何影响,并且类型是唯一更新的内容。

@nestjs/swaggermapped-types更新 swagger 架构元数据,以便您的 OpenAPI 规范正确显示。

同样,@nestjs/graphql mapped-types更新 GraphQL 模式以便 Apollo 不会在部分更新时抛出异常。

因为所有这些元数据都以不同的方式处理,并且不重叠,所以使用三种不同的方式来处理它。此外,为了帮助保持基本包较小,而不是需要其他两个包中的元数据密钥。


推荐阅读