typescript - วิธีซ่อนบริการจาก public_api.ts ในไลบรารี Angular
ผมกำลังมองหาวิธีสร้างไลบรารี Angular (7.2.15) แบบแชร์ได้ และต้องการเผยเฉพาะคลาสนามธรรมที่ผมใช้เป็นอินเทอร์เฟซใน public_api.ts อย่างไรก็ตาม ผมยังคงพบข้อผิดพลาดที่บอกว่า ไม่สามารถหาโมดูล './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)
}
}
อินเทอร์เฟซแอป.ts
export abstract class AppInterface {
public abstract getEventObservable (): Observable<string>
}
อินเทอร์เฟซห้องสมุด.ts
export abstract class LibraryInterface {
public abstract addEvent (eventCode: string): void
}
ฉันกำลังมองหาวิธีที่จะให้บริการในรูปแบบโมดูลในไลบรารีของฉันดังนี้: { provide: AppInterface, useClass: MyService }, { provide: LibraryInterface, useClass: MyService } อย่างไรก็ตาม ถ้าฉันให้ AppInterface ในโมดูลที่ถูกส่งออกใน public_api.ts มันจะบังคับให้ฉันต้องส่งออกทั้ง interface และ service ใน public_api.ts มิฉะนั้นฉันจะเจอข้อผิดพลาดตามย่อหน้าแรก ฉันเพียงต้องการให้แอปที่ใช้ไลบรารีของฉันสามารถนำเข้า interface ได้เท่านั้น ไม่ใช่ service
ปัญหาเพิ่มเติมอีกอย่างหนึ่งที่ดูเหมือนผมจะแก้ไม่ได้คือ ถ้าผมไม่เคยให้ AppInterface ที่ไหนเลย และให้ LibraryInterface ในโมดูลที่ไม่ถูกส่งออกใน public_api.ts ผมก็ยังเจอข้อผิดพลาดอยู่ ไม่แน่ใจว่าทำไมมันถึงคาดหวังให้ผมให้บริการภายในที่ไม่เคยถูกเปิดให้แอปใช้...