Validating Service Definition in TypeScript

Is this a legit/semantic service definition?
export class PhotoService extends Effect.Tag("@boda/photo-service")<
  PhotoService,
  {
    likePhoto: (payload: {
      photo_id: string;
      user_id: string;
    }) => Effect.Effect<unknown, Defect, EventService>;
    dislikePhoto: (payload: {
      photo_id: string;
      user_id: string;
    }) => Effect.Effect<void, Defect, EventService>;
    listPhotos: (
      limit?: number,
      last?: string,
    ) => Effect.Effect<Photo[], Defect>;
    getPhoto: (id: string) => Effect.Effect<Option.Option<Photo>, Defect>;
    comment: (
      id: string,
      user_id: string,
      comment: string,
    ) => Effect.Effect<void, Defect>;
  }
>() {
  static get live() {
    return PhotoServiceLayer;
  }
}

I have the impression that the 'EventService' should be an implementation detail, but then I am forced to provide the EventService when creating the Live version of the service :
export const PhotoServiceLive = PhotoService.of({

Because otherwise it will not match the interface, and I want to provide all the required services at the runtime, like this:
export const ServerRuntime = ManagedRuntime.make(
  Layer.mergeAll(PhotoServiceLayer, UserServiceLive, EventService.Live).pipe(
    Layer.provide(
      Layer.mergeAll(Layer.setConfigProvider(configService), LoggerWithSpans),
    ),
  ),
);

Still, this is a bit smelly to me
Was this page helpful?