Dev Highlights

Доки по разработке

This project is maintained by teniryte

Декораторы классов и членов

Принципы

Пример

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) {}
}

Практика