typescript - Hur man typar updateQueryData i redux-toolkit


Jag har framgångsrikt implementerat en optimistisk uppdatering i redux-toolkit. Men jag kan inte skriva den korrekt. Min kod är lik exemplet i redux-toolkit.

const postsApiSlice = api.injectEndpoints({
  endpoints: (builder) => ({
    getPost: builder.query<Post, number>({
      query: (id) => ROUTES.POST(id),
      providesTags: (result, error, id) => {
        return [{ type: POST_TAG, id }]
      },
    }),
    updatePostWithOptimism: builder.mutation<void, Pick<Post, 'id'> & Partial<Post>>({
      query: ({ id, ...patch }) => ({
        url: ROUTES.POST(id),
        method: 'PATCH',
        body: patch,
      }),
      async onQueryStarted({ id, ...patch }, { dispatch, queryFulfilled }) {
        // ERROR at 'getPost': Argument of type 'string' is not assignable to parameter of type 'never'.ts(2345)
        const manualGetPostUpdate = dispatch(api.util.updateQueryData('getPost', id, (draft) => {
          Object.assign(draft, patch)
        }))
        try {
          await queryFulfilled
        } catch {
          manualGetPostUpdate.undo()
        }
      },
    }),
  }),
})

Svar #1

Typen av api känner inte till getPost-endpointen. Använd den injicerade api:n (postsApiSlice.util.updateQueryData) istället.

Också, på en sidonotering: ditt api-namn antyder på något sätt (jag kan ha fel) att du också lägger till det där "injected" api:t i configureStore-anropet som en egen slice. Du behöver inte göra det - att bara lägga till api i configureStore räcker.

Relaterade artiklar