Машинопись 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;
};