From 3f827aea051d9c1b7ab3d9a98f01dbafc8d6f546 Mon Sep 17 00:00:00 2001 From: Sebastien Guillemot Date: Fri, 9 Aug 2024 05:27:03 +0900 Subject: [PATCH 1/4] Add MethodResponse utility type --- packages/openapi-fetch/src/index.d.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/openapi-fetch/src/index.d.ts b/packages/openapi-fetch/src/index.d.ts index e7e7f96b6..c1fdbd5a5 100644 --- a/packages/openapi-fetch/src/index.d.ts +++ b/packages/openapi-fetch/src/index.d.ts @@ -190,6 +190,20 @@ export interface Client { eject(...middleware: Middleware[]): void; } +export type ClientPathsWithMethod< + CreatedClient extends Client, + Method extends HttpMethod, +> = CreatedClient extends Client ? PathsWithMethod : never; + +export type MethodResponse< + CreatedClient extends Client, + Method extends HttpMethod, + Path extends ClientPathsWithMethod, + Options = {}, +> = CreatedClient extends Client + ? NonNullable["data"]> + : never; + export default function createClient( clientOptions?: ClientOptions, ): Client; From 1b967da5c653a93cdc414d41147dc4d937c90526 Mon Sep 17 00:00:00 2001 From: Sebastien Guillemot Date: Sat, 10 Aug 2024 13:53:43 +0900 Subject: [PATCH 2/4] Add type test for MethodResponse --- packages/openapi-fetch/test/index.test.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/openapi-fetch/test/index.test.ts b/packages/openapi-fetch/test/index.test.ts index 0055dcba7..2f89be2de 100644 --- a/packages/openapi-fetch/test/index.test.ts +++ b/packages/openapi-fetch/test/index.test.ts @@ -1,6 +1,7 @@ import { HttpResponse, type StrictResponse } from "msw"; import { afterAll, beforeAll, describe, expect, expectTypeOf, it } from "vitest"; import createClient, { + type MethodResponse, type Middleware, type MiddlewareCallbackParams, type QuerySerializerOptions, @@ -132,6 +133,7 @@ describe("client", () => { created_at: number; updated_at: number; }>(); + expectTypeOf(result.data).toEqualTypeOf>(); } else { expectTypeOf(result.data).toBeUndefined(); expectTypeOf(result.error).extract<{ code: number }>().toEqualTypeOf<{ code: number; message: string }>(); From 3bafebf6e2fb256fffca5f3e46e352eb8beda0ef Mon Sep 17 00:00:00 2001 From: Sebastien Guillemot Date: Sat, 10 Aug 2024 13:57:55 +0900 Subject: [PATCH 3/4] add cahngeset --- .changeset/hip-years-invite.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/hip-years-invite.md diff --git a/.changeset/hip-years-invite.md b/.changeset/hip-years-invite.md new file mode 100644 index 000000000..4a751730b --- /dev/null +++ b/.changeset/hip-years-invite.md @@ -0,0 +1,5 @@ +--- +"openapi-fetch": patch +--- + +Add MethodResponse utility type to easily get the return type of an endpoint on a client From d51ed16ba05cd40f484f02d562fbcaabed8fd809 Mon Sep 17 00:00:00 2001 From: Sebastien Guillemot Date: Sat, 10 Aug 2024 14:02:59 +0900 Subject: [PATCH 4/4] fix formatting --- packages/openapi-fetch/test/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/openapi-fetch/test/index.test.ts b/packages/openapi-fetch/test/index.test.ts index 2f89be2de..352ac6f9f 100644 --- a/packages/openapi-fetch/test/index.test.ts +++ b/packages/openapi-fetch/test/index.test.ts @@ -133,7 +133,7 @@ describe("client", () => { created_at: number; updated_at: number; }>(); - expectTypeOf(result.data).toEqualTypeOf>(); + expectTypeOf(result.data).toEqualTypeOf>(); } else { expectTypeOf(result.data).toBeUndefined(); expectTypeOf(result.error).extract<{ code: number }>().toEqualTypeOf<{ code: number; message: string }>();