Переопределение свойства getter от аксессора декоратора - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть такой код:

function changeProperty(prototype: Object, propertyKey: string) {
  Object.defineProperty(prototype, 'extra', {
    get: () => 'added'
  });

  const existing = Object.getOwnPropertyDescriptor(prototype, propertyKey);
  Object.defineProperty(prototype, propertyKey, {
    get: () => 'pass'
  });
}

class Test {
  @changeProperty
  get original() { return 'fail'}
}

// Write TypeScript code!
const appDiv: HTMLElement = document.getElementById('app');
const x = new Test() as any;
appDiv.innerHTML = `original: ${x.original}<br/>extra: ${x.extra}`;

https://stackblitz.com/edit/typescript-j8s1bq

Я вижу, что свойство extra успешно добавлено, но я не могу переопределить / перезаписать / удалить существующее свойство.

Я не могу понять, почему это так.

Если я использую декоратор класса, я могу использовать ту же технику для переопределения геттеров.

1 Ответ

0 голосов
/ 12 апреля 2020

Что я пропустил, так это то, что для accessor декораторов у вас есть PropertyDescriptor, переданный в качестве третьего аргумента.

достаточно сделать следующее:


propertyDescriptor.get = () => 'new value';
...