OpenAPI2 min read

Xaritaga tushirilgan turlar

CRUD (Create/Read/Update/Delete) kabi imkoniyatlarni qurishda bazaviy entitet turiga asoslangan variantlarni yaratish ko'pincha foydali bo'ladi. Nest bu vazifani qulaylashtirish uc

CRUD (Create/Read/Update/Delete) kabi imkoniyatlarni qurishda bazaviy entitet turiga asoslangan variantlarni yaratish ko'pincha foydali bo'ladi. Nest bu vazifani qulaylashtirish uchun turga transformatsiyalarni bajaradigan bir nechta yordamchi funksiyalarni taqdim etadi.

Partial

Kiritma validatsiya turlarini (DTO) yaratishda bir xil tur asosida create va update variantlarini qurish ko'pincha foydali. Masalan, create varianti barcha maydonlarni talab qilishi mumkin, update varianti esa hamma maydonlarni ixtiyoriy qilishi mumkin.

Nest bu vazifani yengillashtirish va ortiqcha kodni kamaytirish uchun PartialType() yordamchi funksiyasini taqdim etadi.

PartialType() funksiyasi kiritma turining barcha xususiyatlari ixtiyoriy qilib belgilangan tur (klass) ni qaytaradi. Masalan, quyidagicha create turimiz bo'lsa:

TypeScript
1import { ApiProperty } from '@nestjs/swagger';
2
3export class CreateCatDto {
4  @ApiProperty()
5  name: string;
6
7  @ApiProperty()
8  age: number;
9
10  @ApiProperty()
11  breed: string;
12}

Standart holatda bu maydonlarning barchasi majburiy. Xuddi shu maydonlarga ega, lekin har biri ixtiyoriy bo'lgan tur yaratish uchun PartialType() dan foydalaning va argument sifatida klassga havolani (CreateCatDto) uzating:

TypeScript
1export class UpdateCatDto extends PartialType(CreateCatDto) {}
Hint

PartialType() funksiyasi @nestjs/swagger paketidan import qilinadi.

Pick

PickType() funksiyasi kiritma turidan xususiyatlar to'plamini tanlab yangi tur (klass) hosil qiladi. Masalan, quyidagi turdan boshlasak:

TypeScript
1import { ApiProperty } from '@nestjs/swagger';
2
3export class CreateCatDto {
4  @ApiProperty()
5  name: string;
6
7  @ApiProperty()
8  age: number;
9
10  @ApiProperty()
11  breed: string;
12}

PickType() yordamchi funksiyasi orqali ushbu klassdan xususiyatlar to'plamini tanlashimiz mumkin:

TypeScript
1export class UpdateCatAgeDto extends PickType(CreateCatDto, ['age'] as const) {}
Hint

PickType() funksiyasi @nestjs/swagger paketidan import qilinadi.

Omit

OmitType() funksiyasi kiritma turidagi barcha xususiyatlarni oladi va keyin ma'lum kalitlar to'plamini olib tashlab tur hosil qiladi. Masalan, quyidagi turdan boshlasak:

TypeScript
1import { ApiProperty } from '@nestjs/swagger';
2
3export class CreateCatDto {
4  @ApiProperty()
5  name: string;
6
7  @ApiProperty()
8  age: number;
9
10  @ApiProperty()
11  breed: string;
12}

Quyidagi kabi name dan tashqari barcha xususiyatlarga ega hosila tur yaratishimiz mumkin. Bu konstruksiyada OmitType ning ikkinchi argumenti xususiyat nomlari massividir.

TypeScript
1export class UpdateCatDto extends OmitType(CreateCatDto, ['name'] as const) {}
Hint

OmitType() funksiyasi @nestjs/swagger paketidan import qilinadi.

Intersection

IntersectionType() funksiyasi ikki turni bitta yangi tur (klass) ga birlashtiradi. Masalan, quyidagi ikki turdan boshlasak:

TypeScript
1import { ApiProperty } from '@nestjs/swagger';
2
3export class CreateCatDto {
4  @ApiProperty()
5  name: string;
6
7  @ApiProperty()
8  breed: string;
9}
10
11export class AdditionalCatInfo {
12  @ApiProperty()
13  color: string;
14}

Har ikkala turdagi barcha xususiyatlarni birlashtiruvchi yangi tur yaratishimiz mumkin.

TypeScript
1export class UpdateCatDto extends IntersectionType(
2  CreateCatDto,
3  AdditionalCatInfo,
4) {}
Hint

IntersectionType() funksiyasi @nestjs/swagger paketidan import qilinadi.

Kompozitsiya

Tur xaritalash yordamchi funksiyalari kombinatsiya qilinishi mumkin. Masalan, quyidagi kod CreateCatDto turidagi name dan tashqari barcha xususiyatlarga ega bo'lgan va ularni ixtiyoriy qilib belgilovchi tur (klass) yaratadi:

TypeScript
1export class UpdateCatDto extends PartialType(
2  OmitType(CreateCatDto, ['name'] as const),
3) {}