Я пытаюсь создать прокси для угловых компонентов.Исходя из этого решения: https://github.com/Microsoft/TypeScript/issues/4890#issuecomment-141879451
Я закончил с этим:
interface Type<T> {
new (...args): T;
}
interface Base {}
interface Identifiable {}
export function IdentifiableSubclass<T extends Base>(SuperClass: Type<T>) {
class C extends (<Type<Base>>SuperClass) {
// constructor(...args) {
// super(...args);
// return new Proxy(this, {
// get(target, name) {
// return target[name];
// }
// });
// }
}
return <Type<Identifiable & T>>C;
}
Использование:
@Component({...})
class HeroesComponent {
constructor(public heroService: HeroService) {}
}
const HeroesComponentLogged = IdentifiableSubclass(HeroesComponent);
export { HeroesComponentLogged as HeroesComponent };
Это работает.Проблема в том, что он не работает, если я раскомментирую конструктор: heroService is undefined
.
Я думаю, что он как-то связан с DI Angular, потому что следующее работает на TS Playground (конструктор без комментариев):
class HeroService {
public sayGoodbye() {
console.log("Goodbye");
}
}
class HeroComponent {
constructor(public heroService: HeroService) {
}
}
const IdentifiedHeroComponent = IdentifiableSubclass(HeroComponent);
let identified = new IdentifiedHeroComponent(new HeroService());
identified.heroService.sayGoodbye();