Как скрыть сервисы от public_api.ts в библиотеке Angular - PullRequest
2 голосов
/ 11 июня 2019

Я хочу создать общую библиотеку Angular (7.2.15) и предоставлять только абстрактные классы, которые я использую в качестве интерфейсов в public_api.ts. Тем не менее, я продолжаю сталкиваться с ошибками, говоря: Cannot find module './lib/my-module/my.service.

Причина этого в том, что мне нужен одноэлементный сервис для записи событий в компонентах моей библиотеки и передачи их во внешнее приложение через EventEmitter. Я только хочу, чтобы само приложение имело доступ к EventEmitter, а не к другим методам службы. Поэтому я создал свой сервис так:

my.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)
  }
}

приложение-interface.ts

export abstract class AppInterface {
  public abstract getEventObservable (): Observable<string>
}

библиотека-interface.ts

export abstract class LibraryInterface {
  public abstract addEvent (eventCode: string): void
}

Я хочу предоставить сервис в модулях моей библиотеки следующим образом: { provide: AppInterface, useClass: MyService }, { provide: LibraryInterface, useClass: MyService }. Однако, если я предоставлю AppInterface в модуле, экспортированном в public_api.ts, мне потребуется экспортировать как интерфейс, так и службу в public_api.ts, в противном случае я получу ошибку из первого абзаца. Я хочу, чтобы только приложения, использующие мою библиотеку, могли импортировать интерфейс, но не службу.

Одна дополнительная складка, которую я не могу обойти, если я никогда нигде не предоставлю AppInterface и не предоставлю LibraryInterface в модуле, который не экспортируется в public_api.ts, я все еще сталкиваюсь с ошибкой , Не уверен, почему он ожидал, что я предоставлю внутреннюю службу, которая никогда не будет доступна приложению ...

...