Redux-Toolkit中createAsyncThunk调用报错:期望0个参数却传入1个
解决Redux createAsyncThunk调用时的参数类型错误
这个报错是因为TypeScript无法自动推断createAsyncThunk接收的参数类型,默认认为该thunk不需要传入参数,导致你传selectedFolderId时触发类型检查错误。
解决方法:显式指定泛型类型
给createAsyncThunk添加泛型定义,明确指定返回值类型、参数类型以及可选的错误返回值类型:
// 先定义返回数据的类型(根据接口返回结构自定义) type DirectoryResponse = { // 示例字段,替换为你的实际返回结构 id: string; name: string; }; export const deleteDirectories = createAsyncThunk< DirectoryResponse, // 第一个泛型:thunk成功时返回的数据类型 string | number, // 第二个泛型:thunk接收的参数类型(对应你的id类型) { rejectValue: string } // 第三个泛型:reject时返回的错误值类型(可选) >( "directories/deleteDirectories", async (id, thunkAPI) => { try { const response = await axios.delete(`${url}directories/${id}`); return response.data; } catch (error) { return thunkAPI.rejectWithValue("Something went wrong..."); } } );
如果不需要定义错误返回值类型,可以简化为:
export const deleteDirectories = createAsyncThunk<DirectoryResponse, string>( "directories/deleteDirectories", async (id, thunkAPI) => { try { const response = await axios.delete(`${url}directories/${id}`); return response.data; } catch (error) { return thunkAPI.rejectWithValue("Something went wrong..."); } } );
关键说明
显式指定泛型后,TypeScript就能正确识别deleteDirectories需要接收一个参数,此时在组件中dispatch(deleteDirectories(selectedFolderId))就不会再触发类型错误。如果你的selectedFolderId是number类型,只需对应修改第二个泛型的类型即可。
内容的提问来源于stack exchange,提问作者SerbianDeveloper
相关产品推荐
相关产品推荐

