typescript - Hur man döljer tjänster från public_api.ts i Angular-bibliotek
Jag vill skapa ett delat Angular (7.2.15) bibliotek och endast exponera abstrakta klasser som jag använder som gränssnitt i public_api.ts. Men jag stöter hela tiden på fel som säger Kan inte hitta modul './lib/my-module/my.service'.
Anledningen till detta är att jag behöver en singleton-tjänst för att registrera händelser i mitt biblioteks komponenter och tillhandahålla dem till den yttre applikationen via en EventEmitter. Jag vill bara att själva applikationen ska ha åtkomst till EventEmitter, och inte de andra metoderna i tjänsten. Så jag skapade min tjänst på följande sätt:
min.service.ts
@Injectable()
export class MyService implements AppInterface, LibraryInterface {
private _events: Subject<string>
public getEventObservable (): Observable<string> {
return this._events.asObservable()
}
public addEvent (eventCode: string): void {
this._events.next(eventCode)
}
}
app-gränssnitt.ts
export abstract class AppInterface {
public abstract getEventObservable (): Observable<string>
}
bibliotek-gränssnitt.ts
export abstract class LibraryInterface {
public abstract addEvent (eventCode: string): void
}
Jag vill tillhandahålla tjänsten i moduler i mitt bibliotek så här: { provide: AppInterface, useClass: MyService }, { provide: LibraryInterface, useClass: MyService }. Men om jag tillhandahåller AppInterface i en modul som exporteras i public_api.ts, krävs det att jag exporterar både gränssnittet OCH tjänsten i public_api.ts, annars får jag felet från första stycket. Jag vill att appar som använder mitt bibliotek bara ska kunna importera gränssnittet, aldrig tjänsten.
En ytterligare komplikation jag inte verkar kunna kringgå är att om jag aldrig tillhandahåller AppInterface någonstans, och tillhandahåller LibraryInterface i en modul som inte exporteras i public_api.ts, stöter jag fortfarande på felet. Inte säker på varför det skulle förvänta sig att jag tillhandahåller en intern tjänst som aldrig exponeras för appen...