Я хочу создать общую библиотеку 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
, я все еще сталкиваюсь с ошибкой , Не уверен, почему он ожидал, что я предоставлю внутреннюю службу, которая никогда не будет доступна приложению ...