typescript - Typning af `set`-metoden fra Zustand store med Immer middleware, mens autoudfyldelse bevares


Jeg har problemer med at skrive typen på set-metoden fra Zustand store, mens jeg bruger Immer middleware. Jeg har brug for at skrive typen, da nogle egenskaber indeholder funktioner, der vil opdatere tilstanden, så de har brug for set-funktionen:

export const useStore = create<Store>()(
     immer((set, get) => ({
         func: beginDraggingVertex(set, get, vertexID) 
     }))
)     

....

function beginDraggingVertex(set: Setter, get: Getter, vertexID: string) {
  ...ommited
  set((store) => 
   // here is where I do want to have the autocomplete working
   store.whateverProperty = 'hi'
  )

}

Hvis jeg fjerner Immer-middleware fra butikken, får jeg, når jeg holder musen over set-metoden, dens type, så jeg senere kan angive typen på beginDraggingVertex-deklarationens argumenter. Men med Immer anvendt ændres set-metoden, og hvis jeg ændrer typen af set til den nye type, mister jeg autoudfyldning.

 //`set` type with Immer applied, with this one I loose autocomplete wihtin:
 type Setter = (
  nextStateOrUpdater:
    | (Store & ActionsObject)
    | Partial<Store & ActionsObject>
    | ((state: WritableDraft<Store & ActionsObject>) => void),
  shouldReplace?: boolean | undefined
) => void

//`set` type without Immer:
 export type Setter = (
  partial:
    | (Store & ActionsObject)
    | Partial<Store & ActionsObject>
    | ((state: Store & ActionsObject) => (Store & ActionsObject) | Partial<Store & ActionsObject>),
  replace?: boolean | undefined
) => void


Hvis jeg anvender Immer og derefter giver set den gamle type fra når det ikke blev anvendt, får jeg naturligvis autoudfyld, men jeg får disse fejl både i set-callback'en:

I was expecting (Store & ActionsObject) | Partial<Store & ActionsObject> | ((state: Store & ActionsObject) => (Store & ActionsObject) | Partial<...>), but you passed (store: Store & ActionsObject) => void

Jeg vil virkelig sætte pris på enhver hjælp, du kan give.