我有一個裝飾器,我已經在不同服務的某些方法中使用了它,它按預期作業。
我創建了一個具有靜態方法的抽象類,并使用與上述相同的裝飾器對其進行裝飾。
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');
它回傳undefined。一旦我注釋掉抽象類中的裝飾器,它就會回傳字串“是的,寶貝!” 正如預期的那樣。
我在這里想念什么?
uj5u.com熱心網友回復:
您做對了,但您忘記將呼叫回傳到原始值:
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);
^^^^^^^
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481465.html
上一篇:'(dispatch:Dispatch<ShopDispatchTypes>)=>Promise<void>'型別的引數不可分配給'AnyA
下一篇:如何檢查物件的型別是否為類?
