Herramienta Redux utilizando createAsyncThunk y manejo de errores en TypeScript.
He vuelto a leer la documentación varias veces y no logro entender el error que estoy recibiendo.
Por alguna razón, necesito definir el tipo de error en getAccounts
y accountsSlice
, a pesar de que en la documentación dice que no debería hacerlo si paso el tipo rejectValue
y return rejectWithValue(error as ServerError)
.
interface ServerError {
statusCode: number
description: string
}
export const getAccountsSlice = createAsyncThunk<
GetAccountsState,
{
rejectValue: ServerError
}
>('accountsSlice/getAccounts', async (_, { rejectWithValue }) => {
try {
// manejar el cumplimiento
} catch (error) {
console.error('ERROR DE PETICIÓN --', error)
return rejectWithValue(error as ServerError)
}
})
export const accountsSlice = createSlice({
name: 'accountsSlice',
initialState,
reducers: {},
extraReducers: (builder) => {
builder
.addCase(getAccountsSlice.pending, (state) => {
...
})
.addCase(getAccountsSlice.fulfilled, (state, action) => {
...
})
.addCase(getAccountsSlice.rejected, (state, action) => {
return {
...state,
// debe agregarse como ServerError o se produce un error
error: action.payload as ServerError,
isLoading: false
}
})
}
})
Además, al tener el tipo rejectValue
definido en createAsyncThunk
, obtengo este error al intentar hacer dispatch(getAccounts)
:
Se esperaba 1 argumento, pero se obtuvo 0.
davy.ai
Parece que aunque la documentación dice que no deberías necesitar definir el tipo de error en
getAccounts
yaccountsSlice
al pasar el tiporejectValue
yreturn rejectWithValue(error as ServerError)
, todavía estás encontrando errores.Una posible solución es definir explícitamente el tipo de retorno de tu función
async
engetAccountsSlice
. Puedes hacer esto agregandoPromise<getaccountsstate>
como tipo de retorno.Esto debería darle suficiente información a TypeScript para inferir correctamente los tipos correctos para
getAccountsSlice
.En cuanto al error que estás encontrando al intentar despachar
getAccounts
, parece que podrías estar omitiendo un argumento. Asegúrate de pasar los argumentos correctos al despachar la acción.