@Min, @Max

Валидационные декораторы числовых границ используются для контроля допустимого диапазона значений в свойствах классов. В контексте работы с библиотекой валидации объектов они обеспечивают проверку минимального и максимального порога для числовых полей, предотвращая попадание некорректных данных в бизнес-логику приложения.

Декораторы @Min и @Max применяются к числовым свойствам и задают нижнюю и верхнюю границы допустимых значений соответственно. Проверка выполняется во время валидации экземпляра класса, а результат зависит от соответствия значения указанным ограничениям.


Декоратор @Min

@Min задаёт минимально допустимое значение для числового поля. Значение свойства должно быть больше или равно указанному порогу, иначе валидация считается неуспешной.

Базовое применение

import { Min } from "class-validator";

class Product {
  @Min(1)
  price: number;
}

В этом примере свойство price не может быть меньше 1. Любое значение 0 или отрицательное число приведёт к ошибке валидации.

Механика проверки

Проверка выполняется по принципу сравнения:

  • если value >= minValue — валидация проходит
  • если value < minValue — возникает ошибка

Расширенный пример с бизнес-логикой

import { Min } from "class-validator";

class UserAccount {
  @Min(18)
  age: number;

  @Min(0)
  balance: number;
}

Ограничение возраста гарантирует соответствие минимальному допустимому значению, а баланс не допускает отрицательных значений, если модель описывает систему без кредитного лимита.


Декоратор @Max

@Max задаёт максимально допустимое значение для числового поля. Проверка гарантирует, что значение не превышает установленный предел.

Базовое применение

import { Max } from "class-validator";

class Discount {
  @Max(100)
  percentage: number;
}

В данном случае процент скидки не может превышать 100.

Логика проверки

  • если value <= maxValue — значение допустимо
  • если value > maxValue — возникает ошибка

Пример ограничения диапазона

import { Min, Max } from "class-validator";

class TemperatureSettings {
  @Min(-50)
  @Max(50)
  temperature: number;
}

Такое сочетание формирует диапазон допустимых значений от -50 до 50 включительно.


Совместное использование @Min и @Max

Комбинация двух декораторов позволяет задавать строгие диапазоны значений, что особенно полезно при описании ограниченных числовых параметров.

import { Min, Max } from "class-validator";

class Rating {
  @Min(1)
  @Max(5)
  score: number;
}

В этом случае допустимыми являются только значения 1, 2, 3, 4 и 5.


Поведение при различных типах данных

Проверка применяется только к числовым значениям. При передаче строк или других типов поведение зависит от предварительной трансформации данных.

class Example {
  @Min(10)
  value: number;
}

Если значение передано как строка "15", без преобразования типов валидация может быть некорректной, поскольку библиотека не всегда выполняет автоматическое приведение типов. В типизированных приложениях обычно используется явная трансформация входных данных перед валидацией.


Работа с дробными значениями

@Min и @Max поддерживают работу с числами с плавающей точкой без дополнительных настроек.

import { Min, Max } from "class-validator";

class Measurement {
  @Min(0.1)
  @Max(9.9)
  precisionValue: number;
}

Проверка выполняется с учётом фактического числового значения, включая дробную часть.


Особенности сравнения

Операции сравнения в @Min и @Max основаны на стандартных математических правилах:

  • включают граничные значения (>= для Min и <= для Max)
  • не выполняют округление
  • не преобразуют типы данных автоматически
  • опираются на строгое числовое сравнение

Использование в сложных моделях

Валидационные ограничения часто применяются в доменных моделях, где требуется контроль допустимых диапазонов для нескольких взаимосвязанных полей.

import { Min, Max } from "class-validator";

class LoanApplication {
  @Min(1000)
  @Max(1000000)
  amount: number;

  @Min(12)
  @Max(360)
  termMonths: number;

  @Min(0)
  @Max(100)
  interestRate: number;
}

Каждое поле ограничено собственным диапазоном, отражающим правила предметной области.


Поведение при ошибках валидации

При нарушении ограничений формируется объект ошибки, содержащий информацию о несоответствии. В типичной структуре ошибок указывается:

  • имя свойства
  • значение, которое не прошло проверку
  • ограничение (min или max)
  • сообщение об ошибке
{
  property: "age",
  value: 15,
  constraints: {
    min: "age must not be less than 18"
  }
}

Такая структура позволяет точно определить причину нарушения правил.


Применение в связке с другими декораторами

@Min и @Max часто используются вместе с другими числовыми и типовыми ограничениями для формирования комплексной схемы валидации.

import { IsNumber, Min, Max } from "class-validator";

class Config {
  @IsNumber()
  @Min(0)
  @Max(100)
  cpuLimit: number;
}

В этом случае проверка включает:

  • соответствие числовому типу
  • проверку нижней границы
  • проверку верхней границы

Поведение при отсутствии значения

Если значение свойства отсутствует (undefined или null), @Min и @Max сами по себе не инициируют проверку. Валидация активируется только при наличии значения, если не добавлены дополнительные ограничения, такие как обязательность поля.

import { Min } from "class-validator";

class Example {
  @Min(10)
  value?: number;
}

В данной конфигурации отсутствие значения не вызывает ошибку, но наличие значения ниже 10 приведёт к нарушению.


Практика использования в прикладных системах

Ограничения диапазонов часто применяются в следующих контекстах:

  • финансовые системы (лимиты транзакций, суммы платежей)
  • игровые механики (уровни, очки, здоровье)
  • конфигурационные параметры (таймауты, пороги нагрузки)
  • аналитические модели (диапазоны метрик и коэффициентов)

Строгое ограничение значений позволяет минимизировать ошибки данных на уровне входной валидации и снижает необходимость дополнительных проверок в бизнес-логике.