多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 映射类型 像构建CRUD特性一样,通常需要基于实体类型创建变体。Nest提供了一些应用函数来进行类型变换,以让这类变换工作更简单。 ### `Partial(部分声明)` 在创建数据转换对象(也称为DTO),将`创建`和`更新`创建为同一类型通常很有用。例如,创建变体可能需要所有字段,但更新变体可能将所有字段都配置为可选的。 Nest提供了`PartialType()`应用函数让这一任务更简单地最小化构造。 `PartialType()`函数返回一个类型`(类)`将输入的所有属性配置为可选的。例如,你可以这样创建一个类型。 ```TypeScript import { ApiProperty } from '@nestjs/swagger'; export class CreateCatDto { @ApiProperty() name: string; @ApiProperty() age: number; @ApiProperty() breed: string; } ``` 默认所有的字段都是必须的。要创建一个所有字段与之相同但都是可选的字段,使用`PartialType()`并将`CreateCatDto`作为参数。 ```TypeScript export class UpdateCatDto extends PartialType(CreateCatDto) {} ``` > `PartialType()`函数从`@nestjs/swagger`引入. ### `Pick(拾取)` `PickType()`函数从输入类型中拾取一部分属性并生成一个新类型(类) 。假设我们起始类如下: ```TypeScript import { ApiProperty } from '@nestjs/swagger'; export class CreateCatDto { @ApiProperty() name: string; @ApiProperty() age: number; @ApiProperty() breed: string; } ``` 我们使用`PickType()`从中拾取一部分属性: ```TypeScript export class UpdateCatAgeDto extends PickType(CreateCatDto, ['age'] as const) {} ``` > `PickType()`函数 从`@nestjs/swagger`引入. ### `Omit(省略)` `OmitType()`函数拾取所有输入属性,移除指定部分属性。例如,我们起始类型如下: ```TypeScript import { ApiProperty } from '@nestjs/swagger'; export class CreateCatDto { @ApiProperty() name: string; @ApiProperty() age: number; @ApiProperty() breed: string; } ``` 我们可以以此创建一个除`name`之外的包含其他所有属性的类。`OmitType`函数的第二个参数是包含要移除属性名称的数组。 ```TypeScript export class UpdateCatDto extends OmitType(CreateCatDto, ['name'] as const) {} ``` > `OmitType()`函数从`@nestjs/swagger`引入. ### `Intersection(交叉)` `IntersectionType()`函数将两个类型组合为一个类型(类),例如,我们起始的两个类型如下: ```TypeScript import { ApiProperty } from '@nestjs/swagger'; export class CreateCatDto { @ApiProperty() name: string; @ApiProperty() breed: string; } export class AdditionalCatInfo { @ApiProperty() color: string; } ``` 我们可以生成一个由两个类中所有属性组成的新类型。 ```TypeScript export class UpdateCatDto extends IntersectionType( CreateCatDto, AdditionalCatInfo, ) {} ``` >`IntersectionType()`函数从`@nestjs/swagger`引入. ### `Composition(组合)` 映射类型的使用时可以组合的,例如,以下代码创建一个类型(类),它包含了`CreateCatDto`除了`name`之外的所有属性,并将所有属性设置为可选的。 ```TypeScript export class UpdateCatDto extends PartialType( OmitType(CreateCatDto, ['name'] as const), ) {} ```