typescript - NGRX data: EntityServicesBase-konstruktören accepterar endast ett argument


Jag försöker skapa en subklass EntityServices för applikationsklassens bekvämlighet enligt NGRX/data-dokumentationen på https://ngrx.io/guide/data/entity-services#sub-class-entityservices-for-application-class-convenience

Tyvärr verkar det angivna exemplet inte fungera med den senaste versionen av ngrx/data 8.5.2. Exemplet ser ut så här:

@Injectable()
  export class AppEntityServices extends EntityServicesBase {
    constructor(
      public readonly store: Store<EntityCache>,
      public readonly entityCollectionServiceFactory: EntityCollectionServiceFactory,

      // Inject custom services, register them with the EntityServices, and expose in API.
      public readonly heroesService: HeroesService,
      public readonly villainsService: VillainsService
    ) {
      super(store, entityCollectionServiceFactory);
      this.registerEntityCollectionServices([heroesService, villainsService]);
  }
}

När jag använder exemplet med min kod får jag följande TypeScript-fel:

Fel: (parameter) entityCollectionServiceFactory: EntityCollectionServiceFactory Förväntade 1 argument, men fick 2. ts(2554)

för raden när jag kallar föräldrakonstruktorn super(...) Det ser ut som EntityServicesBase:s konstruktor bara accepterar 1 argument av typen EntityServicesElements. Men hur kan jag skapa min egen AppEntityService? Jag kunde inte hitta något fungerande exempel.

Svar #1

Det finns ett nytt injicerbart objekt du kan tillhandahålla nu, en instans av EntityServicesElements (importerat från @ngrx/data):

@Injectable()
export class AppEntityServices extends EntityServicesBase {
  constructor(
    entityServicesElements: EntityServicesElements,
    // Inject custom services, register them with the EntityServices, and expose in API.
    public readonly heroesService: HeroesService,
    public readonly villainsService: VillainsService
  ) {
    super(entityServicesElements);
    this.registerEntityCollectionServices([heroesService, villainsService]);
  }
}