typescript - A Zustand tároló `set` metódusának típusozása Immer middleware-rel, miközben megmarad az automatikus kiegészítés
Problémám van a Zustand tárolóból származó set metódus típusának meghatározásával az Immer köztes réteg használata közben. Tényleg szükségem van a típusára, mivel néhány tulajdonság olyan függvényeket tartalmaz, amelyek frissítik az állapotot, tehát szükségük van a set függvényre:
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'
)
}
Ha eltávolítom az Immer middleware-t a store-ból, amikor a set metódus fölé viszem az egeret, megkapom a típusát, így később a beginDraggingVertex deklarációs argumentumait is típusozhatom. De ha az Immer-t alkalmazom, a set metódus megváltozik, és ha a set típusát az új típusra változtatom, elvesztem az automatikus kiegészítést.
//`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
Ha alkalmazom az Immer-t, majd a set-nek az eredeti típust adom, amikor ez nem volt alkalmazva, természetesen kapok automatikus kiegészítést, de mindenképpen kapok ezeket a hibákat a set visszahívásban:
I was expecting (Store & ActionsObject) | Partial<Store & ActionsObject> | ((state: Store & ActionsObject) => (Store & ActionsObject) | Partial<...>), but you passed (store: Store & ActionsObject) => voidNagyon értékelem bármilyen segítséget, amit nyújtani tudna.