Quiero obtener un tipo para el estado redux, que se usará para simular dicho estado.
Hasta ahora descubrí que tengo este Reductor:
(alias) const reducer: { selectedElement: Reducer<StructureElement, AnyAction>; fetchedState: Reducer<FetchedState, AnyAction>; ... 10 more ...; mesApi: Reducer<...>; } Entonces, lo que quiero hacer es obtener de alguna manera el StructureElement , FetchedState y demás desde el interior del Reducer</here/, AnyAction>; parte.
¿Cómo puedo lograr eso?
¿O hay una mejor manera de obtener un tipo de estado combinado? Aunque tiene que hacerse automáticamente. No quiero cambiar los tipos en 2 lugares cuando debería generarse automáticamente.
Si pruebo esto:
type State = typeof reducer;yo obtengo
Escriba '{ elemento seleccionado: Reducer<StructureElement, AnyAction>; estado obtenido: Reducer<estado obtenido, cualquier acción>; ... 10 más ...; mesApi: Reductor<...>; }' no se puede asignar al tipo '{ selectedElement?: { stateId: string; parentId: cadena; hasChild: booleano; rutaLista: cadena[]; nombre: cadena; color: cuerda; isActive: booleano; nivel: número; ¿niños?: ...[]; clave?: cadena; tipo: tipo de estado; }; ... 11 más ...; mesApi?: { ...; }; }'. Los tipos de propiedad 'selectedElement' son incompatibles.
lo que tiene sentido.
Recomendaría simplemente modelarlo explícitamente y luego importar esos tipos donde los necesite:
export type UserState = { readonly isLoggedIn: boolean; // other user state here }; // Type for entire global redux state export type AppState = { users: UserState; // other sub-states here };Personalmente, creo un segmento para cada función que quiero en mi estado, luego tengo un archivo en el que primero declararé y exportaré mi tipo de estado raíz, y luego combinaré todos mis reductores.
export interface RootState { pokemon: pokemonState; pokemonTrainer: pokemonTrainerState; } const reducer = combineReducers<RootState>({ pokemon: pokemonSLice, pokemonTrainer: pokemonTrainerSlice, }); Donde pokemonState y pokemonTrainerState son los tipos de cada función.
Y luego RootState donde lo necesite.
Vale, estaba siendo estúpido. Tenía algo como esto de la configuración básica:
export type RootState = ReturnType<typeof store.getState>;Y parece hacer el truco.