diff --git a/src/services/types.ts b/src/services/types.ts index 0294da69..c791f607 100644 --- a/src/services/types.ts +++ b/src/services/types.ts @@ -87,23 +87,35 @@ export type ServiceMethodOptions = BaseServiceMethodOptions | undefined | never; export type Segment = string | Record; -export type ServiceMethod = ( - methodOptions?: O & BaseServiceMethodOptions, - sdkOptions?: SDKOptions, -) => Promise; +type HasRequiredMethodOptions = Partial extends O ? false : true; + +export type ServiceMethod = + HasRequiredMethodOptions extends true + ? (methodOptions: O & BaseServiceMethodOptions, sdkOptions?: SDKOptions) => Promise + : (methodOptions?: O & BaseServiceMethodOptions, sdkOptions?: SDKOptions) => Promise; export type ServiceMethodDynamicSegments< S extends Segment, O extends ServiceMethodOptions, R extends Response = Response, -> = ( - segments: S, - methodOptions?: O & { - query?: BaseServiceMethodOptions['query']; - headers?: BaseServiceMethodOptions['headers']; - }, - sdkOptions?: SDKOptions, -) => Promise; +> = + HasRequiredMethodOptions extends true + ? ( + segments: S, + methodOptions: O & { + query?: BaseServiceMethodOptions['query']; + headers?: BaseServiceMethodOptions['headers']; + }, + sdkOptions?: SDKOptions, + ) => Promise + : ( + segments: S, + methodOptions?: O & { + query?: BaseServiceMethodOptions['query']; + headers?: BaseServiceMethodOptions['headers']; + }, + sdkOptions?: SDKOptions, + ) => Promise; /** * Provides a type-safe union of a subset of object keys.