Доки по разработке
This project is maintained by teniryte
Принципы
PropertyDescriptor и Object.defineProperty легко управлять доступностью, логированием и модификацией значений.Пример
const Enumerable = (value: boolean) =>
(target: any, key: string, descriptor: PropertyDescriptor) => {
descriptor.enumerable = value;
};
function LogAccess(target: any, prop: string) {
let value = target[prop];
Object.defineProperty(target, prop, {
get() {
console.log(`get ${prop}: ${value}`);
return value;
},
set(newVal) {
console.log(`set ${prop}: ${newVal}`);
value = newVal;
},
});
}
@Test('CLASS')
class Person {
@Test('PROPERTY')
name = '';
@LogAccess
age = 90;
@Enumerable(true)
@Test('METHOD')
myMethod(@Test('PARAMETER1') arg: string, @Test('PARAMETER2') arg2: number) {}
}
Практика
LogAccess) — полезно при отладке stateful-классов.experimentalDecorators в tsconfig.json.