typescript - Typisierung der `set`-Methode aus dem Zustand-Store mit Immer-Middleware, während die Autovervollständigung beibehalten wird
Ich habe Probleme, die set-Methode des Zustand-Stores zu typisieren, während ich das Immer-Middleware benutze. Ich muss sie typisieren, da einige Eigenschaften Funktionen enthalten, die den Zustand aktualisieren, also benötigen sie die set-Funktion:
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'
)
}
Wenn ich die Immer-Middleware aus dem Store entferne, erhalte ich beim Überfahren der set-Methode deren Typ, sodass ich später die Argumente in der beginDraggingVertex-Deklaration typisieren kann. Aber mit angewendetem Immer ändert sich die set-Methode und wenn ich den Typ von set in den neuen Typ ändere, verliere ich die Autovervollständigung.
//`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
Wenn ich Immer anwende und dann set den alten Typ von wann immer es nicht angewendet wurde gebe, erhalte ich natürlich die Autovervollständigung, aber ich bekomme diese Fehler sowohl im set-Callback:
I was expecting (Store & ActionsObject) | Partial<Store & ActionsObject> | ((state: Store & ActionsObject) => (Store & ActionsObject) | Partial<...>), but you passed (store: Store & ActionsObject) => voidIch schätze jede Hilfe, die Sie mir geben könnten, wirklich.