如何使用类装饰器向类添加新属性?
例如,代码:
@MyClassDecorator
class MyClass {
myFirstName: string;
myLastName: string;
}
// I need something like this:
function MyClassDecorator (target: any): any {
target['myNickname'] = 'Gambler';
}
let myClass = new MyClass();
console.log(myClass['myNickname']); // expecting "Gambler" but got "undefined"
如何修正这段代码?
是否可以使用装饰器将属性添加到类中?
谢谢!
发布于 2016-12-06 09:17:05
您需要将属性添加到原型,而不是构造函数:
function MyClassDecorator(target: any): any {
target.prototype.myNickname = "Gambler";
}
这样你就能得到你想要的东西,但问题是,如果没有类型记录的抱怨,你就无法访问这个属性:
let myClass = new MyClass();
console.log(myClass.myNickname); // error: Property 'myNickname' does not exist on type 'MyClass'
你可以尝试这样的方法:
function myClassFactory(): MyClass & { myNickname: string } {
return new MyClass() as MyClass & { myNickname: string };
}
let myClass = myClassFactory();
console.log(myClass.myNickname); // all good
(操场密码
https://stackoverflow.com/questions/41000670
复制