Typescript 函数装饰器更改参数

时间:2021-07-27 12:23:11

标签: typescript typescript-decorator

我声明了以下函数装饰器:

export function WithAlpha(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<Function>) {
  const method = descriptor.value;

  descriptor.value = function (...args)  {
    return method.apply(this, ['alpha']);
  }
}

我尝试在这个类上测试它:

export class AlphaCl {
  @WithAlpha
  async someMethod(alpha: string) {
    console.log(alpha);
  }
}

但是我没有在 console.log 中获得 alpha,而是未定义。 如何使用装饰器更改函数参数?

1 个答案:

答案 0 :(得分:0)

descriptor 的类型应该更新。另外,method 应该被选中

function WithAlpha(target: AlphaCl, propertyKey: string, descriptor: TypedPropertyDescriptor<(alpha: string) => Promise<void>>) {
  const method = descriptor.value;
  if (method) {
    descriptor.value = function (...args: any[]) {
      return method.apply(this, ['alpha']);
    }
  }
}

class AlphaCl {
  @WithAlpha
  async someMethod(alpha: string) {
    console.log(alpha);
  }
}