Какой шаблон для перехвата выполнения конструктора в TypeScript с использованием aspect.js? - PullRequest
0 голосов
/ 15 октября 2018

Каков шаблон для перехвата выполнения конструктора в TypeScript с использованием aspect.js?

Это не документированный AFAICT, и мой обходной путь - добавить статический фабричный метод с именем new к каждому классу, а затем статическиперехватите это, используя beforeStaticMethod advice:

import { Wove as Advised } from 'aspect.js'
import './aspects/Aspect'
import './aspects/Aspect2'

@Advised()
export default class Thing {
  static new (s: string = '', t: number = 0) {
    return new Thing(...arguments)
  }
  // ...
}

затем, в аспекте:

import {
  Metadata,
  beforeStaticMethod,
  beforeMethod,
  afterStaticMethod,
  afterMethod,
  beforeGetter,
  beforeSetter,
  afterGetter,
  afterSetter
} from 'aspect.js'

export default class Aspect {
  @beforeStaticMethod({ classNamePattern: /.*/, methodNamePattern: /^new$/ })
  beforeNew (meta: Metadata) {
    console.log('Aspect beforeNew')
  }
  // ...
}

Это работает, но для разработчиков TypeScript / JavaScript неестественно использовать метод newвместо обычного new Thing() синтаксиса.

...