可能有可能开发一个方法装饰器,即:“@rpcMethod” 修改一个类的原型?
最后我要:
@rpcMethod
get(){
....
}
并且在运行时:
instance.getRpcMethods(); //returns ['get']
我在装饰器中尝试了所有类型的东西(即:修改target.prototype),但都失败了。
谢谢!
答案 0 :(得分:1)
很抱歉迟到的回复,试试这个:
var rpcMethod = (target: Object, propName: string, propertyDescriptor: TypedPropertyDescriptor<() => any>) => {
var desc = Object.getOwnPropertyDescriptor(target, "getRpcMethods");
if (desc.configurable)
{
Object.defineProperty(target, "getRpcMethods", { value: function() { return this["rpcMethods"]; }, configurable: false });
Object.defineProperty(target, "rpcMethods", { value: [] });
}
target["rpcMethods"].push(propName);
};
class MyClass
{
public getRpcMethods():string[] {
throw new Error("Should be implemented by decorator");
}
@rpcMethod
public get() {
return "x";
}
@rpcMethod
public post() {
return "y";
}
}
var myInstance = new MyClass();
myInstance.getRpcMethods();