Skip to content

Commit 4529b1c

Browse files
committed
[IO-363] fix type overloads
1 parent b2e00fd commit 4529b1c

File tree

1 file changed

+32
-18
lines changed

1 file changed

+32
-18
lines changed

src/language/typescript/3.0/serializers/operation-object.ts

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,6 @@ export const serializeOperationObject = combineReader(
300300
const hasBodyParameter = isSome(parameters.serializedBodyParameter);
301301
const hasHeaderParameters = isSome(parameters.serializedHeadersParameter);
302302
const hasParameters = hasQueryParameters || hasBodyParameter || hasHeaderParameters;
303-
const hasResponseMap = either.isRight(serializedResponses);
304303

305304
const bodyType = pipe(
306305
parameters.serializedBodyParameter,
@@ -335,36 +334,53 @@ export const serializeOperationObject = combineReader(
335334
option.map(headers => `const headers = ${headers.io}.encode(parameters.headers)`),
336335
option.getOrElse(() => ''),
337336
);
338-
const accepArg = hasResponseMap ? 'accept?: A;' : '';
339-
340337
const argsType = concatIf(
341-
hasParameters || hasResponseMap,
338+
hasParameters,
342339
parameters.serializedPathParameters.map(p => p.type),
343-
[`parameters${hasParameters ? '' : '?'}: { ${queryType}${bodyType}${headersType}${accepArg} }`],
340+
[`parameters${hasParameters ? '' : '?'}: { ${queryType}${bodyType}${headersType} }`],
341+
).join(',');
342+
343+
const argsTypeWithAccept = concatIf(
344+
true,
345+
parameters.serializedPathParameters.map(p => p.type),
346+
[`parameters${hasParameters ? '' : '?'}: { ${queryType}${bodyType}${headersType} accept: A; }`],
344347
).join(',');
345348

346349
const type = pipe(
347350
serializedResponses,
348351
either.fold(
349352
sr => `
350-
${getJSDoc(array.compact([deprecated, operation.summary]))}
351-
readonly ${operationName}: (${argsType}) => ${getKindValue(kind, sr.schema.type)};
352-
`,
353+
${getJSDoc(array.compact([deprecated, operation.summary]))}
354+
readonly ${operationName}: (${argsType}) => ${getKindValue(kind, sr.schema.type)};
355+
`,
353356
sr => `
354-
${getJSDoc(array.compact([deprecated, operation.summary]))}
355-
readonly ${operationName}: <A extends keyof MapToResponse${operationName} = '${
356-
sr[0].mediaType
357-
}'>(${argsType}) => ${getKindValue(kind, `MapToResponse${operationName}[A]`)};
358-
`,
357+
${getJSDoc(array.compact([deprecated, operation.summary]))}
358+
${operationName}(${argsType}): ${getKindValue(kind, `MapToResponse${operationName}['${sr[0].mediaType}']`)};
359+
${operationName}<A extends keyof MapToResponse${operationName}>(${argsTypeWithAccept}): ${getKindValue(
360+
kind,
361+
`MapToResponse${operationName}[A]`,
362+
)};`,
359363
),
360364
);
361365

362366
const argsIO = concatIf(
363-
hasParameters || hasResponseMap,
367+
hasParameters,
364368
parameters.pathParameters.map(p => p.name),
365369
['parameters'],
366370
).join(',');
367371

372+
const methodTypeIO = pipe(
373+
serializedResponses,
374+
either.fold(
375+
() => `(${argsIO})`,
376+
() => `
377+
<A extends keyof MapToResponse${operationName}>(${argsTypeWithAccept}): ${getKindValue(
378+
kind,
379+
`MapToResponse${operationName}[A]`,
380+
)}`,
381+
),
382+
);
383+
368384
const decode = pipe(
369385
serializedResponses,
370386
either.fold(
@@ -376,9 +392,7 @@ export const serializeOperationObject = combineReader(
376392
serializedResponses,
377393
either.fold(
378394
sr => `const accept = '${sr.mediaType}';`,
379-
sr =>
380-
`const rawAccept = (parameters && parameters.accept)!;
381-
const accept = (rawAccept || '${sr[0].mediaType}') as typeof rawAccept;`,
395+
sr => `const accept = (parameters && parameters.accept || '${sr[0].mediaType}') as A`,
382396
),
383397
);
384398

@@ -409,7 +423,7 @@ export const serializeOperationObject = combineReader(
409423
}`;
410424

411425
const io = `
412-
${operationName}: (${argsIO}) => {
426+
${operationName}: ${methodTypeIO} => {
413427
${bodyIO}
414428
${queryIO}
415429
${headersIO}

0 commit comments

Comments
 (0)