标记一个方法为需要验证的方法,可作用于类的实例方法和静态方法,但不适用于构造函数。 与Verify#param配合使用,单独使用没有效果
标记一个参数需要验证,参数为验证规则,可以传递多个规则,它们将按参数顺序依次进行验证,一旦某个规则不通过则立即抛出错误,后面的验证规则将不参与验证,且函数体不会执行。 与Verify#fun配合使用,单独使用没有效果
Rest
...rules: ParameterVerifyType[]验证规则
// 参数必须是数字
@v.param('number')
// 参数必须继承自Error类
@v.param(['instanceof', Error])
// 参数必须满足是数字,且数字大于0(由于number规则在前,所以执行自定义规则时,value必然为数字,此时就不需要再在自定义规则中去验证value为数字,直接判断value是否大于0就可以了)
@v.param(number, ['custom', (value: number) => value > 0])
// 如果custom验证传递了第三个参数,则验证不通过时,提示信息将使用该参数
@v.param(number, ['custom', (value: number) => value > 0, '必须大于0'])
const v = new Verify();
class SomeClass {
@v.fun()
someMethod(@v.param('required', 'number') a: number, @v.param('required', 'number') b: number) {
return a + b;
}
}
const c = new SomeClass;
// 方法会报错,根据required规则,参数a和b是必须的,由于按顺序验证a参数时不通过,b参数的验证规则不会执行,同时someMethod方法体 return a + b 也不会执行
c.someMethod();
// 方法会报错,根据number规则,参数a和b是数字。
c.someMethod('1', '2;);
// 方法不会报错,所有规则验证通过。
c.someMethod(1, 2);
TS装饰器类,用于在运行时验证类中定义的方法的参数的合法性,将验证提前到参数的定义,避免在方法的实现中再写验证参数的相关代码。 由于没有使用反射Reflect,所以需要为每个类创建该装饰器的实例,以确保装饰器记录的属性名称不重复。 更多示例可以参考这个Verify Demo
Example