#angular #typescript #angular-dependency-injection
#angular #typescript #внедрение угловой зависимости
Вопрос:
Я пытаюсь создать прокси для компонентов Angular. Исходя из этого решения: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 amp; 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();
Комментарии:
1. Я думаю, что в классе
C
отсутствуют метаданные декоратора из@Component()
. Разве вы не получаете сообщение об ошибке при попытке добавить это вNgModule
?2. Я думаю, вы к чему-то пришли. Как бы вы это оформили? С помощью
@Component({})
я получаюTypeError: Cannot read property 'kind' of undefined
. С@Injectable()
я получаюCan't resolve all parameters for C: (?)