Валидационные декораторы числовых границ используются для контроля допустимого диапазона значений в свойствах классов. В контексте работы с библиотекой валидации объектов они обеспечивают проверку минимального и максимального порога для числовых полей, предотвращая попадание некорректных данных в бизнес-логику приложения.
Декораторы @Min и @Max применяются к
числовым свойствам и задают нижнюю и верхнюю границы допустимых значений
соответственно. Проверка выполняется во время валидации экземпляра
класса, а результат зависит от соответствия значения указанным
ограничениям.
@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 задаёт максимально допустимое значение для
числового поля. Проверка гарантирует, что значение не превышает
установленный предел.
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 включительно.
Комбинация двух декораторов позволяет задавать строгие диапазоны значений, что особенно полезно при описании ограниченных числовых параметров.
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 основаны
на стандартных математических правилах:
Валидационные ограничения часто применяются в доменных моделях, где требуется контроль допустимых диапазонов для нескольких взаимосвязанных полей.
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;
}
Каждое поле ограничено собственным диапазоном, отражающим правила предметной области.
При нарушении ограничений формируется объект ошибки, содержащий информацию о несоответствии. В типичной структуре ошибок указывается:
{
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 приведёт к нарушению.
Ограничения диапазонов часто применяются в следующих контекстах:
Строгое ограничение значений позволяет минимизировать ошибки данных на уровне входной валидации и снижает необходимость дополнительных проверок в бизнес-логике.