Возврат данных от createAsycnThunk(TypeScript) в зависимости от полученных данных от сервера
Есть createAsyncThunk на TypeScript, который отправит на сервер логин и пароль для регистрации:
export interface NewUserInterface { username: string, password: string, _id: string, createdAt: string, updatedAt: string } export interface NewUserDataInterface { token: string, newUser: NewUserInterface, message: string } export const registerUser = createAsyncThunk<NewUserDataInterface, {username:string, password:string}, {rejectValue:string}>( 'auth/registerUser', async function ({username, password}, {rejectWithValue}) { try { const response = await instance.post('/register', { username, password }) if(response.data.token){ window.localStorage.setItem('token', response.data.token) } return response.data; } catch (error) { return rejectWithValue('') } } )На сервере контроллер обработает запрос, и дальше по логике если такого юзера нет, зарегистрирует нового, если же юзер такой существует то вернет сообщение, что "такой юзер уже есть". На фронте, я в любом случае получу положительный статус и нового юзера или сообщение от сервера. Но в createAsyncThunk я указал, что верну interface который ему передал NewUserDataInterface, по этому при создании юзера все работает, но при регистрации с уже существующим логином все крашится ибо interface который возвращает thunk не такой конструкции как если с сервера приходит одно сообщение. Контроллер:
export const register = async function (request, response) { try { const { username, password } = request.body; const isUser = await User.findOne({username}); if(isUser){ return response.json({message: 'such user is already exist'}) } const salt = bcrypt.genSaltSync(10); const hashPassword = bcrypt.hashSync(password, salt); const newUser = new User({ username: username, password: hashPassword }); const token = jwt.sign({id: newUser._id}, process.env.JWT_SECRET, {expiresIn: '30d'}) await newUser.save(); response.json({ newUser, token, message: 'user heas been created' }) } catch(error){ response.json({message: 'error creating user'}) } }В extrareducers ругается если сервер вернет сообщение, а не полноценного пользователя ибо не знает куда записать action.payload.newUser.username ибо thunk вернул только сообщение
.addCase(registerUser.fulfilled, (state, action) => { state.username = action.payload.newUser.username; state.token = action.payload.token; state.status = action.payload.message; })
Вопрос, можно ли передать в thunk, передать 2 интерфейса и в зависимости от ответа сервера использовать один из них. Или в таких случаях другой подходи используют?