装饰器的动态设置器-Typescript抱怨只读属性

考虑以下代码:

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,但是打字稿抱怨t.prop为只读

tcj222022 回答:装饰器的动态设置器-Typescript抱怨只读属性

以下代码可能会对您有所帮助

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
本文链接:https://www.f2er.com/2802446.html

大家都在问