Як використовувати декоратор NPM class-validator IsEnum для забезпечення значень атрибутів класу

pic

Фото Марка Лішмана на Unsplash

Нещодавно я створював чат-бота для сервісу обміну повідомленнями. Під час розробки цього сервісу я виявив, що багато різних типів повідомлень мають спільний атрибут "type" з попередньо визначеним списком можливих значень.

Щоб зробити мій додаток безпечнішим, я захотів використати пакет NPM class-validator, щоб забезпечити дотримання правил для атрибутів моїх класів. Це було особливо важливо для забезпечення попередньо заданого списку значень для типів об'єктів повідомлень. Як нам використати декоратор IsEnum з class-validator, щоб забезпечити попередньо заданий набір значень атрибутів?

Що таке enum?

Перед тим як реалізувати декоратор IsEnum, давайте розберемося, що таке enum. Enum — це користувацький тип, що складається з іменованих констант. Вони допомагають забезпечити використання конкретних значень для певного поля.

Припустімо, у нас є клас Shirt для продукту в нашому магазині одягу. Клас Shirt може мати атрибут size, який потрібно керувати. Ми не хочемо, щоб випадкові розміри додавались (що таке "помірно маленька сорочка"?). Enum створює набір можливих значень, і ми не переживаємо про вигадані розміри.

Enum також запобігає використанню непослідовних значень. Хоча значення x-small, extra-small, x-s і X-Small можуть мати одне й те саме значення, програмісти не хочуть керувати всіма цими варіантами.

З enum ми можемо створити набір чутливих до регістру значень, які може мати атрибут класу. Наш enum для розмірів сорочок може виглядати так:

enum ShirtSize { ‘XS’, ’S’, ‘M’, ‘L’, ‘XL’, XXL’ }

Якщо ми призначимо неправильну змінну або атрибут для цього типу enum, він відкине це значення.

Як використовувати декоратор IsEnum з class-validator

Тепер, коли ми розібралися, що таке enum, давайте розглянемо, як валідовувати за допомогою IsEnum з class-validator. Повторюючи приклад з класом Shirt з попереднього прикладу, ми можемо отримати такий код класу:

import { IsString, IsNotEmpty, IsNumber } from 'class-validator'  

class Shirt {  
 @IsString()  
 @IsNotEmpty()  
 color: string;  

 @IsNotEmpty()  
 @IsString()  
 size: string;  

 @IsNotEmpty()  
 @IsNumber()  
 price: number;  
 }

У цьому коді наше значення size є будь-яким рядком. Але це не те, що ми хочемо. Замість цього ми хочемо переконатись, що рядок size належить до конкретного набору значень. Для цього ми маємо додати декоратор IsEnum.

Спочатку нам потрібно додати визначення нашого enum. Як тільки ми напишемо наш enum ShirtSize, ми можемо призначити його атрибуту size і додати декоратор IsEnum з одним аргументом нашого enum.

import { IsEnum, IsString, IsNotEmpty, IsNumber } from 'class-validator'  

// Шорткод для визначення змінної. Строкові значення такі ж, як  
// надані ключі  
enum ShirtSize { XS, S, M, L, XL, XXL }  

class Shirt {  
 @IsString()  
 @IsNotEmpty()  
 color: string;  

 @IsNotEmpty()  
 @IsEnum(ShirtSize)  
 size: ShirtSize;  

 @IsNotEmpty()  
 @IsNumber()  
 price: number;  
 }




Перекладено з: [How to use NPM class-validator’s IsEnum to Enforce Class Attribute Values](https://dpericich.medium.com/how-to-use-npm-class-validators-isenum-to-enforce-class-attribute-values-97fecacc0889)

Leave a Reply

Your email address will not be published. Required fields are marked *