来自decorator-Typescript的动态setter抱怨只读属性
考虑以下代码:来自decorator-Typescript的动态setter抱怨只读属性,typescript,typescript-decorator,Typescript,Typescript Decorator,考虑以下代码: function configurable(target: any, propertyKey: string, descriptor: PropertyDescriptor) { descriptor.set = (n: number) => { target[`_${propertyKey}`] = n * 100; }; } class Test { _prop: number = 10; @configurable
function configurable(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.set = (n: number) => {
target[`_${propertyKey}`] = n * 100;
};
}
class Test {
_prop: number = 10;
@configurable
get prop(): number {
return this.prop;
}
}
const t = new Test();
t.prop = 100;
这是一个愚蠢的例子,我试图动态添加一个带有装饰器的setter,但是typescript抱怨t.prop是只读的
function configurable(multiplierFactor: number) {
return function (target, propertyKey: string) {
const privatePropName = `_${propertyKey}`;
Object.defineProperty(target, propertyKey, {
configurable: false,
get: function (this) {
return this[privatePropName];
},
set: function (this, value) {
this[privatePropName] = value * multiplierFactor;
},
});
}
}
class Test {
@configurable(10)
prop: number = 1;
}
const t = new Test();
console.log(t.prop) // 10
t.prop = 20;
console.log(t.prop) // 200
TS编译器没有看到decorator添加setter,因为这是在运行时完成的。它看到只有一个getter,因此它假定该属性是只读的。您是否也可以生成getter,这样您只需在类中编写prop:number?