Skip to content

Commit 9c30ca8

Browse files
committed
strongly type endpoint name
1 parent fd52689 commit 9c30ca8

File tree

5 files changed

+32
-4
lines changed

5 files changed

+32
-4
lines changed

packages/toolkit/src/query/core/buildInitiate.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ declare module './module' {
2929
Definition extends QueryDefinition<any, any, any, any, any>,
3030
// eslint-disable-next-line @typescript-eslint/no-unused-vars
3131
Definitions extends EndpointDefinitions,
32+
EndpointName extends PropertyKey = string,
3233
> {
3334
initiate: StartQueryActionCreator<Definition>
3435
}
@@ -37,6 +38,7 @@ declare module './module' {
3738
Definition extends MutationDefinition<any, any, any, any, any>,
3839
// eslint-disable-next-line @typescript-eslint/no-unused-vars
3940
Definitions extends EndpointDefinitions,
41+
EndpointName extends PropertyKey = string,
4042
> {
4143
initiate: StartMutationActionCreator<Definition>
4244
}

packages/toolkit/src/query/core/buildSelectors.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ declare module './module' {
5353
export interface ApiEndpointQuery<
5454
Definition extends QueryDefinition<any, any, any, any, any>,
5555
Definitions extends EndpointDefinitions,
56+
EndpointName extends PropertyKey = string,
5657
> {
5758
select: QueryResultSelectorFactory<
5859
Definition,
@@ -67,6 +68,7 @@ declare module './module' {
6768
export interface ApiEndpointMutation<
6869
Definition extends MutationDefinition<any, any, any, any, any>,
6970
Definitions extends EndpointDefinitions,
71+
EndpointName extends PropertyKey = string,
7072
> {
7173
select: MutationResultSelectorFactory<
7274
Definition,

packages/toolkit/src/query/core/buildThunks.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,14 @@ declare module './module' {
5252
Definition extends QueryDefinition<any, any, any, any, any>,
5353
// eslint-disable-next-line @typescript-eslint/no-unused-vars
5454
Definitions extends EndpointDefinitions,
55+
EndpointName extends PropertyKey = string,
5556
> extends Matchers<QueryThunk, Definition> {}
5657

5758
export interface ApiEndpointMutation<
5859
Definition extends MutationDefinition<any, any, any, any, any>,
5960
// eslint-disable-next-line @typescript-eslint/no-unused-vars
6061
Definitions extends EndpointDefinitions,
62+
EndpointName extends PropertyKey = string,
6163
> extends Matchers<MutationThunk, Definition> {}
6264
}
6365

packages/toolkit/src/query/core/module.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -379,9 +379,9 @@ declare module '../apiTypes' {
379379
any,
380380
any
381381
>
382-
? ApiEndpointQuery<Definitions[K], Definitions>
382+
? ApiEndpointQuery<Definitions[K], Definitions, K>
383383
: Definitions[K] extends MutationDefinition<any, any, any, any, any>
384-
? ApiEndpointMutation<Definitions[K], Definitions>
384+
? ApiEndpointMutation<Definitions[K], Definitions, K>
385385
: never
386386
}
387387
}
@@ -393,8 +393,9 @@ export interface ApiEndpointQuery<
393393
Definition extends QueryDefinition<any, any, any, any, any>,
394394
// eslint-disable-next-line @typescript-eslint/no-unused-vars
395395
Definitions extends EndpointDefinitions,
396+
EndpointName extends PropertyKey = string,
396397
> {
397-
name: string
398+
name: EndpointName
398399
/**
399400
* All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
400401
*/
@@ -407,8 +408,9 @@ export interface ApiEndpointMutation<
407408
Definition extends MutationDefinition<any, any, any, any, any>,
408409
// eslint-disable-next-line @typescript-eslint/no-unused-vars
409410
Definitions extends EndpointDefinitions,
411+
EndpointName extends PropertyKey = string,
410412
> {
411-
name: string
413+
name: EndpointName
412414
/**
413415
* All of these are `undefined` at runtime, purely to be used in TypeScript declarations!
414416
*/

packages/toolkit/src/query/tests/createApi.test-d.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,26 @@ describe('type tests', () => {
5151
tagTypes: ['typeA', 'typeB'],
5252
})
5353

54+
test('strongly typed name property', () => {
55+
const injectedApi = api.injectEndpoints({
56+
endpoints: (build) => ({
57+
getPost: build.query({
58+
query: () => 'From',
59+
}),
60+
updatePost: build.mutation({
61+
query: () => 'From',
62+
}),
63+
}),
64+
})
65+
66+
expectTypeOf(
67+
injectedApi.endpoints.getPost.name,
68+
).toEqualTypeOf<'getPost'>()
69+
expectTypeOf(
70+
injectedApi.endpoints.updatePost.name,
71+
).toEqualTypeOf<'updatePost'>()
72+
})
73+
5474
test('query: query & transformResponse types', () => {
5575
api.injectEndpoints({
5676
endpoints: (build) => ({

0 commit comments

Comments
 (0)