Мой столбец базы данных имеет тип с двойной точностью (из Postgres документов )
с двойной точностью 8 байтов с переменной точностью, неточный 15 точность десятичных цифр
Используя проверку классов, я хочу сделать проверку точности
@IsNumber()
/* precision check */
public myValue: number;
Здесь может помочь декоратор IsDecimal
, поэтому @IsDecimal({ decimal_digits: '15' })
может помочь. Мне пришлось бы использовать этот декоратор для нескольких полей, есть ли способ расширить существующий декоратор и просто передать параметр decimal_digits
? Я не думаю, что имеет смысл изобретать велосипед. Было бы хорошо, если бы я мог унаследовать проверку, но установить точность на меньше или равна 15 .
В настоящее время я создал свой собственный декоратор
@ValidatorConstraint()
class IsDoublePrecisionConstraint implements ValidatorConstraintInterface {
public validate(value: any): boolean {
if (typeof value === 'number') {
if (value % 1 === 0) {
return true;
}
const valueText: string = value.toString();
const valueSegments: string[] = valueText.split('.');
const decimalDigits: string = valueSegments[1];
return decimalDigits.length <= 15;
}
return false;
}
public defaultMessage(args: ValidationArguments): string {
return `${args.property} must have less than or equal to 15 decimal digits.`;
}
}
export function IsDoublePrecision() {
return (object: Record<string, any>, propertyName: string) => {
registerDecorator({
target: object.constructor,
propertyName,
validator: IsDoublePrecisionConstraint,
});
};
}
, но я Я не уверен, что этот способ справится с каждым делом.
Заранее спасибо