TypeScript - טיפוס של המתודה `set` מחנות Zustand עם תוספת Immer תוך שמירה על השלמה אוטומטית


יש לי בעיה להקליד את השיטה set מתוך החנות Zustand בעת שימוש במידלוור Immer. אני כן צריך להקליד אותה מכיוון שחלק מהתכונות מכילות פונקציות שעדכנו את המצב, ולכן הן זקוקות לפונקציית set:

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'
  )

}

אם אני מסיר את ה-middleware של Immer מהסטור, כשאני מרחף מעל המתודה set אני מקבל את הסוג שלה כך שאוכל מאוחר יותר להקליד על הפרמטרים של ההצהרה beginDraggingVertex. אך עם Immer מופעל, המתודה set משתנה ואם אני משנה את סוג ה-set לסוג החדש, אני מאבד את ההשלמה האוטומטית.

 //`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


אם אני מיישם את Immer ואז נותן ל-set את הסוג הישן מאז שזה לא יושם, כמובן שאני מקבל השלמה אוטומטית אבל אני בכל זאת מקבל את השגיאות האלה גם ב-callback של set:

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

אני באמת מעריך כל עזרה שתוכל לספק.