Каждый раз, когда я использую абстрактный класс для Angular компонентов для расширения, он ведет себя так, как ожидалось, пока я не объявлю конструктор с помощью супервызова.
Ради объяснения я просто буду использовать пустой абстрактный класс, который вводит Angular маршрутизатор.
abstract class AbstractClass {
constructor(private router: Router) {}
}
@Component({
...
})
export class AppComponent extends AbstractClass {}
В приведенном выше примере все работает нормально, ни один машинописный текст не жалуется, но если я объявлю конструктор в AppComponent, он потребует супер-вызов, например это, чтобы заставить его работать:
@Component({
...
})
export class AppComponent extends Class {
constructor(router: Router) {
super(router);
}
}
И это работает, с другой стороны, если я изменяю AbstractClass и устанавливаю определение private router: Router
как необязательное свойство, например: private router?: Router
, оно работает вызов super super()
без каких-либо параметров, но он не будет внедрять зависимость, ПОЧЕМУ !!.
Мои вопросы:
Как лучше всего это сделать? какова цель constructor(router: Router)
, просто объявляет ли он тип? Такое ощущение, что мне не хватает теории, которая мешает мне понять, как инъекция зависимостей обрабатывается под капотом с абстрактными классами машинописного текста, что делает router
publi c лучшим способом сделать эту зависимость видимой для базового класса ?