NestJS 映射类型和 DTO 用法

NestJS Mapped Types and DTO usage

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

documentationPartialType 创建一个新的 class 使其验证装饰器可选。

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

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

如果是这样,为什么它在 swagger 包(或 graphql)中而不是在核心的实用程序中?

所以,实际上 Nest 中有三个 mapped-types:基础 @nestjs/mapped-types@nestjs/swagger 中的一个和 @nestjs/graphql 中的一个。使用这些包的原因是允许开发人员定义一个基础 class,然后能够定义 class 扩展这个基础 class 但对 [=33= 使用不同的装饰器] 定义。这些 mixin 方法变得很有用,因为它们读取 class 上的现有元数据并对结果 class 进行修改,例如使每个 属性 可选,或省略关键属性,例如password 字段 User class.

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

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

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

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