映射类型
在构建诸如 CRUD(创建/读取/更新/删除)等功能时,通常需要基于基础实体类型构造变体。Nest 提供了几个执行类型转换的工具函数,使这一任务更加便捷。
Partial
在构建输入验证类型(也称为 DTO)时,通常需要为同一类型构建 create 和 update 变体。例如,create 变体可能需要所有字段,而 update 变体可能使所有字段变为可选。
Nest 提供了 PartialType() 工具函数,使这一任务更简单并减少样板代码。
PartialType() 函数返回一个类型(类),其输入类型的所有属性都变为可选。例如,假设我们有一个如下的 create 类型:
import { ApiProperty } from '@nestjs/swagger';
export class CreateCatDto {
@ApiProperty()
name: string;
@ApiProperty()
age: number;
@ApiProperty()
breed: string;
}
默认情况下,所有这些字段都是必填的。要创建一个具有相同字段但每个字段都可选的类型,请使用 PartialType() 并将类引用(CreateCatDto)作为参数传入:
export class UpdateCatDto extends PartialType(CreateCatDto) {}
info 提示 PartialType() 函数从 @nestjs/swagger 包中导入。
Pick
PickType() 函数通过从输入类型中选取一组属性来构造一个新类型(类)。例如,假设我们从如下类型开始:
import { ApiProperty } from '@nestjs/swagger';
export class CreateCatDto {
@ApiProperty()
name: string;
@ApiProperty()
age: number;
@ApiProperty()
breed: string;
}
我们可以使用 PickType() 工具函数从该类中选取一组属性:
export class UpdateCatAgeDto extends PickType(CreateCatDto, ['age'] as const) {}
info 提示 PickType() 函数从 @nestjs/swagger 包中导入。
Omit
OmitType() 函数通过从输入类型中选取所有属性,然后移除特定的一组键来构造一个类型。例如,假设我们从如下类型开始:
import { ApiProperty } from '@nestjs/swagger';
export class CreateCatDto {
@ApiProperty()
name: string;
@ApiProperty()
age: number;
@ApiProperty()
breed: string;
}
我们可以生成一个派生类型,该类型拥有除 name 之外的所有属性,如下所示。在此构造中,OmitType 的第二个参数是属性名的数组。
export class UpdateCatDto extends OmitType(CreateCatDto, ['name'] as const) {}
info 提示 OmitType() 函数从 @nestjs/swagger 包中导入。
Intersection
IntersectionType() 函数将两个类型合并为一个新类型(类)。例如,假设我们从如下两个类型开始:
import { ApiProperty } from '@nestjs/swagger';
export class CreateCatDto {
@ApiProperty()
name: string;
@ApiProperty()
breed: string;
}
export class AdditionalCatInfo {
@ApiProperty()
color: string;
}
我们可以生成一个新类型,该类型包含两个类型中的所有属性。
export class UpdateCatDto extends IntersectionType(
CreateCatDto,
AdditionalCatInfo,
) {}
info 提示 IntersectionType() 函数从 @nestjs/swagger 包中导入。
组合
类型映射工具函数是可组合的。例如,以下代码将生成一个类型(类),该类型拥有 CreateCatDto 类型的所有属性,但排除 name,并且这些属性将被设置为可选:
export class UpdateCatDto extends PartialType(
OmitType(CreateCatDto, ['name'] as const),
) {}