Машинопись TS1241: невозможно разрешить сигнатуру метода-декоратора при вызове в качестве выражения

Мой тестовый код выглядит следующим образом:

function test(target: Object, propertyKey: string, descriptor: TypedPropertyDescriptor<any>) {
    return descriptor;
}

class Test {
    @test
    hello() {
    }
}

но компилятор выдает ошибку

Error:(33, 5) TS1241: Unable to resolve signature of method decorator when called as an expression.
 Supplied parameters do not match any signature of call target.

Я уже указал: --experimentalDecorators --emitDecoratorMetadata

Ответ 1

Кажется, что TypeScript ожидает, что возвращаемый тип функции декоратора будет "any" или "void". Итак, в приведенном ниже примере, если мы добавим : any в конец, он закончит работу.

function test(target: Object, 
              propertyKey: string, 
              descriptor: TypedPropertyDescriptor<any>): any {
    return descriptor;
}

Ответ 2

Используйте --target ES5 --emitDecoratorMetadata --experimentalDecorators

или используйте следующую конфигурацию:

{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "ES5"
  }
}

Ответ 3

Добавьте эту команду в tsconfig для использования decorator.

{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "ES5"
  }
}

Функция декоратора должна понравиться.

function(target: any, key: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
    descriptor.value = async function(...args: any) {
      try {
        const result = await originalMethod.apply(this, args);
        return result;
      } catch (error) {
         console.log(error)
      }
    };

    return descriptor;
  };