У меня есть такой код:
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
успешно добавлено, но я не могу переопределить / перезаписать / удалить существующее свойство.
Я не могу понять, почему это так.
Если я использую декоратор класса, я могу использовать ту же технику для переопределения геттеров.