为什么抽象 class returns 中的修饰静态方法未定义

why does a decorated static method in an abstract class returns undefined

我有一个装饰器,我在不同服务的某些方法中使用了它,它按预期工作。

我创建了一个具有静态方法的抽象 class,并使用与上述相同的装饰器对其进行了装饰。

export function MyDecorator(): MethodDecorator {
  return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {
    const original = descriptor.value;

    descriptor.value = function (...args) {
      if (args[0].message) 
        args[0] = { ...args[0], message: parse(args[0].message) };

      original.call(this, ...args);
    };
  };
}
export abstract class MyAbstractClass {
  @myDecorator()
  static decoratedMethod(param) {
    return 'Yeah Baby!';
  }
}

然后我像这样在我的组件中调用这个方法...

  const result = MyAbstractClass.decoratedMetod('meh');

它 returns undefined。一旦我在摘要 class 中注释掉装饰器,它就会 returns 字符串 'Yeah baby!' 按预期进行。

我在这里错过了什么?

你做对了但是你忘了return调用原始值:

    descriptor.value = function (...args) {
      if (args[0].message) 
        args[0] = { ...args[0], message: parse(args[0].message) };

      // only called, value is not used
      original.call(this, ...args);
    };

您可以通过再添加 7 个字符来解决这个问题:

return original.call(this, ...args);
^^^^^^^

Playground