nestjs - NestJS 映射类型和 DTO 使用
问题描述
我对 NestJS 中的映射类型感到困惑。
文档说创建一个新类,PartialType
使其验证装饰器是可选的。
因此,我们在验证管道中使用它,就像使用原始类一样。
我想知道这是否是派生类的正常用法。我的意思是,使创建部分更新 DTO 变得容易。
如果是这样,为什么它在一个 swagger 包(或 graphql)中而不是在核心的 utils 中?
解决方案
所以,mapped-types
Nest 实际上有 3 个: base @nestjs/mapped-types
、 one in@nestjs/swagger
和 one in @nestjs/graphql
。这些包的原因是允许开发人员定义一个基类,然后能够定义扩展该基类但使用不同装饰器进行验证/模式定义的类。这些 mixin 方法变得很有用,因为它们读取类上的现有元数据并为生成的类对其进行修改,例如使每个属性都是可选的,或者省略关键属性,例如类password
上的字段User
。
该@nestjs/mapped-types
包处理元数据class-validator
,class-transformer
是其他两个包的基础。如果元数据不存在,则元数据不会受到任何影响,并且类型是唯一更新的内容。
@nestjs/swagger
mapped-types
更新 swagger 架构元数据,以便您的 OpenAPI 规范正确显示。
同样,@nestjs/graphql
mapped-types
更新 GraphQL 模式以便 Apollo 不会在部分更新时抛出异常。
因为所有这些元数据都以不同的方式处理,并且不重叠,所以使用三种不同的方式来处理它。此外,为了帮助保持基本包较小,而不是需要其他两个包中的元数据密钥。
推荐阅读
- ios - Apple TestFlight 反馈 RSS
- c++ - 有没有办法从cpp中的文本生成条形码图像?
- node.js - Lambda 正在发送先前的事件而不是“实时”
- python - 二叉树的总和没有按预期的递归运行
- mysql - MySQL,从同一个表中选择 2+ 个匹配项
- angular - 是否可以将组件的内容(ng-content)作为字符串获取?
- cypress - 如何检查元素宽度是否小于或等于赛普拉斯中的像素大小?
- c++ - 我可以使用 malloc 为类对象分配内存吗?
- jenkins - Jenkins插件gitChangelog:如何指定存储库路径
- sql - SQL:为每个 id 增加列值(循环?)