是否可以使用 TypeScripts 装饰器来验证方法参数的值?
Is it possible to use TypeScripts decorator to validate value of method parameters?
我尝试按照本手册进行操作 TypeScript parameter decorators 但很难将它拿出来 是否可以创建装饰器来验证方法参数,如下所示:
class World{
constructor(){
}
sayHelloTo(@checkIfNameBeginsWithCapital name: string){
console.log("Hello World!");
}
}
如果我没理解错的话,可以通过创建两个装饰器来实现,如下:
class World{
constructor(){
}
@validate
sayHelloTo(@nameBeginWithCapital name: string){
console.log("Hello World!");
}
}
@nameBeginWithCapital
将在参数上定义元数据,@validate
将查找具有此类元数据的参数并执行实际验证,对吗?
这个问题我理解正确吗?如果不正确,是否可以创建 @checkIfNameBeginsWithCapital
来执行此任务,而无需在当前 TS 限制内添加装饰器?
@nameBeginWithCapital will define metadata on a parameter and @validate will look for the parameter with such metadata and perform actual validation, am I right?
没错。参数装饰器只能用于添加元数据。正如您所描述的,“繁重的工作”需要通过方法装饰器来完成。一个很好的例子和解释可以在 TypeScript Handbook 中找到(正如你已经找到的那样,这是官方来源),它展示了你试图实现的目标,但使用了 required
验证。
我修改了手册中的示例以适合您的情况并使其在 StackBlitz 上运行。
我尝试按照本手册进行操作 TypeScript parameter decorators 但很难将它拿出来 是否可以创建装饰器来验证方法参数,如下所示:
class World{
constructor(){
}
sayHelloTo(@checkIfNameBeginsWithCapital name: string){
console.log("Hello World!");
}
}
如果我没理解错的话,可以通过创建两个装饰器来实现,如下:
class World{
constructor(){
}
@validate
sayHelloTo(@nameBeginWithCapital name: string){
console.log("Hello World!");
}
}
@nameBeginWithCapital
将在参数上定义元数据,@validate
将查找具有此类元数据的参数并执行实际验证,对吗?
这个问题我理解正确吗?如果不正确,是否可以创建 @checkIfNameBeginsWithCapital
来执行此任务,而无需在当前 TS 限制内添加装饰器?
@nameBeginWithCapital will define metadata on a parameter and @validate will look for the parameter with such metadata and perform actual validation, am I right?
没错。参数装饰器只能用于添加元数据。正如您所描述的,“繁重的工作”需要通过方法装饰器来完成。一个很好的例子和解释可以在 TypeScript Handbook 中找到(正如你已经找到的那样,这是官方来源),它展示了你试图实现的目标,但使用了 required
验证。
我修改了手册中的示例以适合您的情况并使其在 StackBlitz 上运行。