Skip to content

Commit

Permalink
strongly type endpoint name
Browse files Browse the repository at this point in the history
  • Loading branch information
EskiMojo14 committed Apr 6, 2024
1 parent fd52689 commit 9c30ca8
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 4 deletions.
2 changes: 2 additions & 0 deletions packages/toolkit/src/query/core/buildInitiate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ declare module './module' {
Definition extends QueryDefinition<any, any, any, any, any>,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
Definitions extends EndpointDefinitions,
EndpointName extends PropertyKey = string,
> {
initiate: StartQueryActionCreator<Definition>
}
Expand All @@ -37,6 +38,7 @@ declare module './module' {
Definition extends MutationDefinition<any, any, any, any, any>,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
Definitions extends EndpointDefinitions,
EndpointName extends PropertyKey = string,
> {
initiate: StartMutationActionCreator<Definition>
}
Expand Down
2 changes: 2 additions & 0 deletions packages/toolkit/src/query/core/buildSelectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ declare module './module' {
export interface ApiEndpointQuery<
Definition extends QueryDefinition<any, any, any, any, any>,
Definitions extends EndpointDefinitions,
EndpointName extends PropertyKey = string,
> {
select: QueryResultSelectorFactory<
Definition,
Expand All @@ -67,6 +68,7 @@ declare module './module' {
export interface ApiEndpointMutation<
Definition extends MutationDefinition<any, any, any, any, any>,
Definitions extends EndpointDefinitions,
EndpointName extends PropertyKey = string,
> {
select: MutationResultSelectorFactory<
Definition,
Expand Down
2 changes: 2 additions & 0 deletions packages/toolkit/src/query/core/buildThunks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,14 @@ declare module './module' {
Definition extends QueryDefinition<any, any, any, any, any>,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
Definitions extends EndpointDefinitions,
EndpointName extends PropertyKey = string,
> extends Matchers<QueryThunk, Definition> {}

export interface ApiEndpointMutation<
Definition extends MutationDefinition<any, any, any, any, any>,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
Definitions extends EndpointDefinitions,
EndpointName extends PropertyKey = string,
> extends Matchers<MutationThunk, Definition> {}
}

Expand Down
10 changes: 6 additions & 4 deletions packages/toolkit/src/query/core/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -379,9 +379,9 @@ declare module '../apiTypes' {
any,
any
>
? ApiEndpointQuery<Definitions[K], Definitions>
? ApiEndpointQuery<Definitions[K], Definitions, K>
: Definitions[K] extends MutationDefinition<any, any, any, any, any>
? ApiEndpointMutation<Definitions[K], Definitions>
? ApiEndpointMutation<Definitions[K], Definitions, K>
: never
}
}
Expand All @@ -393,8 +393,9 @@ export interface ApiEndpointQuery<
Definition extends QueryDefinition<any, any, any, any, any>,
// 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!
*/
Expand All @@ -407,8 +408,9 @@ export interface ApiEndpointMutation<
Definition extends MutationDefinition<any, any, any, any, any>,
// 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!
*/
Expand Down
20 changes: 20 additions & 0 deletions packages/toolkit/src/query/tests/createApi.test-d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) => ({
Expand Down

0 comments on commit 9c30ca8

Please sign in to comment.