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.