NestJS 映射类型和 DTO 用法
NestJS Mapped Types and DTO usage
我对 NestJS 中的映射类型感到困惑。
documentation 说 PartialType
创建一个新的 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-validator
和 class-transformer
元数据,是其他两个包的基础。如果元数据不存在,则元数据不会受到任何影响,类型是唯一更新的内容。
@nestjs/swagger
的 mapped-types
更新了 swagger 架构元数据,以便您的 OpenAPI 规范正确显示。
同样,@nestjs/graphql
mapped-types
更新了 GraphQL 模式,这样 Apollo 就不会在部分更新时抛出异常。
因为所有这些元数据的处理方式不同,而且它们不重叠,所以采用三种不同的方式来处理它。此外,为了帮助保持基本包较小,而不是需要来自其他两个包的元数据密钥。
我对 NestJS 中的映射类型感到困惑。
documentation 说 PartialType
创建一个新的 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-validator
和 class-transformer
元数据,是其他两个包的基础。如果元数据不存在,则元数据不会受到任何影响,类型是唯一更新的内容。
@nestjs/swagger
的 mapped-types
更新了 swagger 架构元数据,以便您的 OpenAPI 规范正确显示。
同样,@nestjs/graphql
mapped-types
更新了 GraphQL 模式,这样 Apollo 就不会在部分更新时抛出异常。
因为所有这些元数据的处理方式不同,而且它们不重叠,所以采用三种不同的方式来处理它。此外,为了帮助保持基本包较小,而不是需要来自其他两个包的元数据密钥。