扩展现有验证器并仅设置一些选项
extending existing validator and only set some options
我的数据库列是双精度类型(来自Postgres docs)
double precision 8 bytes variable-precision, inexact 15 decimal digits precision
使用 class-validator 我想进行精度检查
@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,
});
};
}
但我不确定这个是否能够处理所有情况。
提前致谢
我没有找到任何关于扩展 class-validator
的现有装饰器的示例,但是 IsDecimal
只是一个普通的 属性 装饰器,那么我们可以将它用作 属性装饰器。
我的想法是创建一个 "normal" 属性 装饰器并在这个装饰器中使用 decimal_digits
选项调用 IsDecimal
。
// function as a const
export const IsDoublePrecision = () => { // use decorator factory way
return (target: object, key: string) => { // return a property decorator function
IsDecimal({ decimal_digits: '15' })(target, key); // call IsDecimal decorator
}
}
用法:
@IsNumber()
/* precision check */
@IsDoublePrecision()
public myValue: number;
我的数据库列是双精度类型(来自Postgres docs)
double precision 8 bytes variable-precision, inexact 15 decimal digits precision
使用 class-validator 我想进行精度检查
@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,
});
};
}
但我不确定这个是否能够处理所有情况。
提前致谢
我没有找到任何关于扩展 class-validator
的现有装饰器的示例,但是 IsDecimal
只是一个普通的 属性 装饰器,那么我们可以将它用作 属性装饰器。
我的想法是创建一个 "normal" 属性 装饰器并在这个装饰器中使用 decimal_digits
选项调用 IsDecimal
。
// function as a const
export const IsDoublePrecision = () => { // use decorator factory way
return (target: object, key: string) => { // return a property decorator function
IsDecimal({ decimal_digits: '15' })(target, key); // call IsDecimal decorator
}
}
用法:
@IsNumber()
/* precision check */
@IsDoublePrecision()
public myValue: number;