You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redux Toolkit initialState不显示API数据、list类型为never[]问题

问题根因

list属性被识别为never[]、dispatch后接口返回值无法正确存入数组,本质是TypeScript的类型推断机制导致的:
你在slice初始状态中给list赋值为空数组[]时,没有指定数组元素的具体类型,TypeScript会默认将无类型的空数组推断为never[]——该类型代表数组永远不能存入任何值,后续dispatch传入接口返回的用户数据时,会因为类型不匹配导致赋值失败。

修复步骤

1. 定义用户数据类型

根据接口返回的字段定义单条用户数据的TS接口:

interface User {
  id: number;
  email: string;
  first_name: string;
  last_name: string;
  avatar: string;
}

2. 为slice状态声明明确类型

不要依赖TS对空数组的自动推断,手动标注state和action的类型:

import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import axios from "axios";

// 定义slice状态的整体类型
interface UserState {
  list: User[];
}

// 初始化状态时绑定类型
const initialState: UserState = {
  list: []
};

export const userSlice = createSlice({
  name: "users",
  initialState,
  reducers: {
    // 标注action.payload的类型为用户数组
    setUserList: (state, action: PayloadAction<User[]>) => {
      state.list = action.payload;
    }
  },
});

export const { setUserList } = userSlice.actions;
export default userSlice.reducer;

3. (推荐)补全异步thunk的类型

为异步请求函数的dispatch参数标注类型,避免后续调用时的类型报错,注意AppDispatch需要从你项目的store配置文件中导入:

// 替换为你项目中store文件的实际路径
import type { AppDispatch } from "../store";

export const fetchAllUsers = () => async (dispatch: AppDispatch) => {
  try {
    const res = await axios.get("https://reqres.in/api/users?page=2");
    dispatch(setUserList(res.data.data));
  } catch (err) {
    console.log(err);
  }
};

如果你是在纯JavaScript项目中遇到这个提示,属于编辑器TS服务的误校验,可以通过JSDoc给空数组加类型注释绕过:list: /** @type {Array} */ [],不影响实际运行效果。

内容的提问来源于stack exchange,提问作者WeboMR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:09:22