带有箭头功能的打字稿装饰器

Posted

技术标签:

【中文标题】带有箭头功能的打字稿装饰器【英文标题】:typescript decorators with arrow functions 【发布时间】:2020-03-28 14:36:18 【问题描述】:

我必须在此实现中实现箭头函数,并且我需要将来自 AWS 的输入转换为自定义模型,以避免对每个 API 执行相同的逻辑。我想过使用装饰器来完成每个功能。由于编译器将其视为属性,因此它不会找到描述符属性并引发异常。有没有办法欺骗编译器将箭头函数识别为实际函数并传递描述符?

 @API(EndpointType.POST)
  public login = async (event: Input): Promise<APIGatewayProxyResult> => 
     ... logic
  

   export function API(apiType:EndpointType): any 
      return (target: any, propertyKey: string, descriptor?: TypedPropertyDescriptor<any>) => 
         descriptor.value = function(request) 
             ... logic
             const bindedOriginalFunction = originalFunction.bind(this)
             const result = bindedOriginalFunction(finalResult);
             return result
         
       return descriptor;
   

【问题讨论】:

【参考方案1】:

必须是箭头函数吗?

class Foo 
  async login(event: Input): Promise<APIGatewayProxyResult>  ... 

在您的情况下,箭头函数不是方法(对象拥有的函数)。您有一个属性,其中包含其他人拥有的函数(箭头函数)。

【讨论】:

不幸的是,我遵循 AWS 控制器服务存储库模式,如果我使用普通函数,它不会将服务注入到类中,它需要依赖注入,这是我将以后想解决

以上是关于带有箭头功能的打字稿装饰器的主要内容,如果未能解决你的问题,请参考以下文章

打字稿装饰器和箭头函数

带有继承的打字稿装饰器

打字稿装饰混乱

是否可以模拟打字稿装饰器?

打字稿方法返回未定义的方法装饰器

打字稿装饰器与类继承