Getter/Setter as function

Viewed 346

Is it possible to create property getter/setter as a function?

Standard getter/setter work like following:

class Test {
  something: any;

  get prop() {
    return something;
  }
  set prop(value) {
    something = value;
  }
}

let instance = new Test();
instance.prop = 'Foo';
console.log(instance.prop); // = Foo

I would need following:

let instance = new Test();
instance.prop('Bar') = 'Foo'; // access setter as a function of prop
console.log(instance.prop('Bar')); // = Foo

Yes, I know it's unorthodox usage and yes, I know that I could implement this functionality bit differently. I'm just interested if this is possible in JS/TS/ES6.

Update

This is the closest I got:

class Test {
  something: any;

  prop(area /* my custom symbol type */) {
    const obj: any = {};
    Object.defineProperty(obj, 'value', {
      // get child object of my complex object
      get: () => this.something[area];
      // replace part of my complex object
      set: (value) => {
        this.something = {...this.something, [area]: value}
      }
    });
  }
}

let instance = new Test();
instance.prop('Bar').value = 'Foo';
console.log(instance.prop('Bar').value); // = Foo

So in short, I'd like to get rid of value suffix if possible.

1 Answers

As @deceze mentioned in the first comment, it is not possible to assign to function call, so solution in the update is as best as it gets.

Related