تايبسكريبت - كتابة نوع طريقة `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'
)
}
إذا قمت بإزالة وسطاء 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 النوع القديم من أي وقت لم يتم تطبيقه، بالطبع أحصل على الإكمال التلقائي لكنني أحصل على هذه الأخطاء في كل من رد النداء set:
I was expecting (Store & ActionsObject) | Partial<Store & ActionsObject> | ((state: Store & ActionsObject) => (Store & ActionsObject) | Partial<...>), but you passed (store: Store & ActionsObject) => voidأنا أقدر حقًا أي مساعدة يمكنك تقديمها.