typescript - การพิมพ์เมธอด `set` จาก store ของ Zustand พร้อมมิดเดิลแวร์ Immer ในขณะที่ยังคงการเติมคำอัตโนมัติ
ฉันกำลังมีปัญหาในการพิมพ์เมธอด set จาก Zustand store ขณะใช้ Immer middleware ฉันจำเป็นต้องพิมพ์มันเนื่องจากคุณสมบัติบางอย่างมีฟังก์ชันที่ใช้ในการอัปเดตสถานะ ดังนั้นจึงต้องใช้ฟังก์ชัน 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 middleware ออกจาก store เมื่อฉันวางเมาส์เหนือเมธอด 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ฉันขอบคุณจริงๆ สำหรับความช่วยเหลือใดๆ ที่คุณสามารถให้ได้