Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

409
Visualizações
¿Es posible usar un tipo de unión mecanografiado para el estado de un segmento de Redux Toolkit?

Me gustaría usar un tipo de unión como este para representar el estado de mi segmento cuando uso Redux Toolkit:

 type AppState = { loading: true } | { loading: false; data: number };

Parece que el uso de Immerjs en los archivos reductores me impide cambiar entre las dos opciones de Unión, por ejemplo:

 import { createSlice, PayloadAction } from "@reduxjs/toolkit"; const initialState: AppState = { loading: true }; export const sampleSlice = createSlice({ name: "sample", initialState, reducers: { setup: (state) => { return { loading: false, data: 5 }; }, }, });

Lo que me da el siguiente error de mecanografiado:

 Type '(state: WritableDraft<{ loading: true; }>) => { loading: false; data: number; }' is not assignable to type 'CaseReducer<{ loading: true; }, { payload: any; type: string; }> | CaseReducerWithPrepare<{ loading: true; }, PayloadAction<any, string, any, any>>'.

¿Hay alguna manera de hacer funcionar esto? Mi solución actual no es usar un tipo de unión para representar el estado, pero me pregunto si existe una solución. También intenté no usar booleanos sino literales de cadena para la clave de loading , pero produce el mismo error.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

NOTA: según los documentos, la opción 2 es el mejor enfoque.

Opción 1 . Proporcione los tipos de parámetros genéricos para createSlice .

 import { createSlice, SliceCaseReducers } from '@reduxjs/toolkit'; type AppState = { loading: true } | { loading: false; data: number }; const initialState: AppState = { loading: true }; type CaseReducers = SliceCaseReducers<AppState>; export const sampleSlice = createSlice<AppState, CaseReducers>({ name: 'sample', initialState, reducers: { setup: (state) => { return { loading: false, data: 5 }; }, }, });

El tipo de state en el reductor de casos:

ingrese la descripción de la imagen aquí

Opción 2. Reparto del estado inicial. Consulte Definición del tipo de estado inicial

 import { createSlice, SliceCaseReducers } from '@reduxjs/toolkit'; type AppState = { loading: true } | { loading: false; data: number }; const initialState: AppState = { loading: true }; // type CaseReducers = SliceCaseReducers<AppState>; export const sampleSlice = createSlice({ name: 'sample', initialState: initialState as AppState, reducers: { setup: (state) => { return { loading: false, data: 5 }; }, }, });

versiones del paquete:

 "@reduxjs/toolkit": "^1.6.1", "typescript": "^4.3.5",
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda