From 9c30ca879b1da0d11ab542188088206d98fc876e Mon Sep 17 00:00:00 2001 From: EskiMojo14 Date: Sat, 6 Apr 2024 10:16:42 +0100 Subject: [PATCH] strongly type endpoint name --- .../toolkit/src/query/core/buildInitiate.ts | 2 ++ .../toolkit/src/query/core/buildSelectors.ts | 2 ++ .../toolkit/src/query/core/buildThunks.ts | 2 ++ packages/toolkit/src/query/core/module.ts | 10 ++++++---- .../src/query/tests/createApi.test-d.ts | 20 +++++++++++++++++++ 5 files changed, 32 insertions(+), 4 deletions(-) diff --git a/packages/toolkit/src/query/core/buildInitiate.ts b/packages/toolkit/src/query/core/buildInitiate.ts index f13ea57740..c4b56e7d5c 100644 --- a/packages/toolkit/src/query/core/buildInitiate.ts +++ b/packages/toolkit/src/query/core/buildInitiate.ts @@ -29,6 +29,7 @@ declare module './module' { Definition extends QueryDefinition, // eslint-disable-next-line @typescript-eslint/no-unused-vars Definitions extends EndpointDefinitions, + EndpointName extends PropertyKey = string, > { initiate: StartQueryActionCreator } @@ -37,6 +38,7 @@ declare module './module' { Definition extends MutationDefinition, // eslint-disable-next-line @typescript-eslint/no-unused-vars Definitions extends EndpointDefinitions, + EndpointName extends PropertyKey = string, > { initiate: StartMutationActionCreator } diff --git a/packages/toolkit/src/query/core/buildSelectors.ts b/packages/toolkit/src/query/core/buildSelectors.ts index 4ca49fc3e4..d6c1c21ee2 100644 --- a/packages/toolkit/src/query/core/buildSelectors.ts +++ b/packages/toolkit/src/query/core/buildSelectors.ts @@ -53,6 +53,7 @@ declare module './module' { export interface ApiEndpointQuery< Definition extends QueryDefinition, Definitions extends EndpointDefinitions, + EndpointName extends PropertyKey = string, > { select: QueryResultSelectorFactory< Definition, @@ -67,6 +68,7 @@ declare module './module' { export interface ApiEndpointMutation< Definition extends MutationDefinition, Definitions extends EndpointDefinitions, + EndpointName extends PropertyKey = string, > { select: MutationResultSelectorFactory< Definition, diff --git a/packages/toolkit/src/query/core/buildThunks.ts b/packages/toolkit/src/query/core/buildThunks.ts index 40328f014f..3d32105d87 100644 --- a/packages/toolkit/src/query/core/buildThunks.ts +++ b/packages/toolkit/src/query/core/buildThunks.ts @@ -52,12 +52,14 @@ declare module './module' { Definition extends QueryDefinition, // eslint-disable-next-line @typescript-eslint/no-unused-vars Definitions extends EndpointDefinitions, + EndpointName extends PropertyKey = string, > extends Matchers {} export interface ApiEndpointMutation< Definition extends MutationDefinition, // eslint-disable-next-line @typescript-eslint/no-unused-vars Definitions extends EndpointDefinitions, + EndpointName extends PropertyKey = string, > extends Matchers {} } diff --git a/packages/toolkit/src/query/core/module.ts b/packages/toolkit/src/query/core/module.ts index c237c7b298..b94f93d5ab 100644 --- a/packages/toolkit/src/query/core/module.ts +++ b/packages/toolkit/src/query/core/module.ts @@ -379,9 +379,9 @@ declare module '../apiTypes' { any, any > - ? ApiEndpointQuery + ? ApiEndpointQuery : Definitions[K] extends MutationDefinition - ? ApiEndpointMutation + ? ApiEndpointMutation : never } } @@ -393,8 +393,9 @@ export interface ApiEndpointQuery< Definition extends QueryDefinition, // eslint-disable-next-line @typescript-eslint/no-unused-vars Definitions extends EndpointDefinitions, + EndpointName extends PropertyKey = string, > { - name: string + name: EndpointName /** * All of these are `undefined` at runtime, purely to be used in TypeScript declarations! */ @@ -407,8 +408,9 @@ export interface ApiEndpointMutation< Definition extends MutationDefinition, // eslint-disable-next-line @typescript-eslint/no-unused-vars Definitions extends EndpointDefinitions, + EndpointName extends PropertyKey = string, > { - name: string + name: EndpointName /** * All of these are `undefined` at runtime, purely to be used in TypeScript declarations! */ diff --git a/packages/toolkit/src/query/tests/createApi.test-d.ts b/packages/toolkit/src/query/tests/createApi.test-d.ts index b33ced1f6e..f5e8cfdae3 100644 --- a/packages/toolkit/src/query/tests/createApi.test-d.ts +++ b/packages/toolkit/src/query/tests/createApi.test-d.ts @@ -51,6 +51,26 @@ describe('type tests', () => { tagTypes: ['typeA', 'typeB'], }) + test('strongly typed name property', () => { + const injectedApi = api.injectEndpoints({ + endpoints: (build) => ({ + getPost: build.query({ + query: () => 'From', + }), + updatePost: build.mutation({ + query: () => 'From', + }), + }), + }) + + expectTypeOf( + injectedApi.endpoints.getPost.name, + ).toEqualTypeOf<'getPost'>() + expectTypeOf( + injectedApi.endpoints.updatePost.name, + ).toEqualTypeOf<'updatePost'>() + }) + test('query: query & transformResponse types', () => { api.injectEndpoints({ endpoints: (build) => ({