내가 두 TS이 저장소 클래스각도 2 DI와 타이프 라이터 상속
1) InvoiceRepository 2) SalesReceiptRepositroy 여기
거기 생성자는
InvoiceRepository과 같은 방법
export class InvoiceRepository extends RepositoryBase {
constructor(
protected http: Http,
protected toasterService: ToasterService,
protected progressbarService: ProgressBarService,
invocieType: InvoiceType = InvoiceType.Invoice,
@Inject('ApiEndpoint') protected apiEndpoint: string) {
super(toasterService, progressbarService);
console.log(invocieType);
}
}
SalesReceiptRepositroy
export class SalesReceiptsRepository extends InvoiceRepository {
constructor(http: Http,
toasterService: ToasterService,
progressbarService: ProgressBarService,
@Inject('ApiEndpoint') apiEndpoint: string) {
super(http, toasterService, progressbarService, InvoiceType.InvoiceCC, apiEndpoint);
}
}
질문 :
1) 내가 InvoiceRepository
에서 SalesReceiptRepository
상속하고있어, 나는 super
클래스 constructor
에 필요한 모든 매개 변수를 전달해야합니다. 고마워요 inject
SalesReceiptRepoistory
객체를 생성 할 때 기본 클래스 및 파생 클래스에 종속됩니까? 또는 기본 클래스는 파생 클래스에서 가져옵니다? 약간의 혼동, 짧게는 InvocieRepository
생성자 3 parameter
보면, InvoiceType
는 enum
내가 처음 값으로 디폴트있어 방법이 두 작품
2) 설명해주십시오. 그러나 console
문에서 로깅 값은 api/
이며 실제로는 4 번째 값인 parameter
입니다. 그래서, 3 번째와 4 번째 매개 변수 값을 모두 api/
으로 설정하고, 세 번째 것은 1
이어야합니다. 이것은 InvoiceRepository
객체가 get'screated 될 때만 발생하지만, SalesReceipRepository
객체가 생성 될 때 잘 동작합니다. 왜?
2) 왜이 매개 변수를 처음에 추가 했습니까? 'provide (InvoiceType : {useValue : InvoiceType.SomeItem})'어딘가를 제공 했습니까? –
아니요, DI로 만든 InvoiceRepository 인스턴스를 기본값으로 설정하고 싶습니다. 그러나'SalesReceiptRepository'의 경우에는'constructor'이라는 기본 클래스를 수동으로 호출하여 올바르게 작동하는 것처럼 보입니다. –
나는 본다. 필자는 선택 사항으로 표시하기 위해 매개 변수 이름의 끝에 (? invocieType? : InvoiceType = ...) 끝에'? '를 추가해야한다고 생각합니다. 매개 변수 목록의 끝에 선택적 매개 변수를 이동해야 할 수도 있습니다 (이에 대해서는 확실하지 않음). –