是否可以使用 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 上运行。