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

TypeScript报错{ identifier: string; }不可分配给ConcatArray<never>如何解决?

报错根因

你定义的initialArticleState中analysers的初始值为空数组[],TypeScript 无法自动推导该数组的元素类型,默认会将其推导为never[]类型。never类型代表不可能存在的值,因此往never[]类型的数组中拼接任何类型的元素都会触发类型不匹配的报错。

解决方法

方法1:给状态显式定义完整接口(最推荐)

先定义 reducer 对应状态的类型结构,再给初始值绑定该类型,TS 就能正确识别数组的元素类型:

interface Update_AnalyserState {
  identifier: string;
}

// 新增state类型定义
interface ArticleState {
  analysers: Update_AnalyserState[]
}

// 给初始值指定类型
const initialArticleState: ArticleState = {
  analysers: [],
};

export function articleReducer(
  state = initialArticleState,
  action: articleReducerAction
) {
  switch (action.type) {
    case ActionType.UPDATE_ANALYSER:
      return {
        ...state,
        analysers: state.analysers
          .filter(a => a.identifier != action.payload.identifier)
          .concat(action.payload),
      };
  }
}

这种写法后续所有对 state 的操作都会有完整的类型校验和提示,可维护性最高。

方法2:直接给空数组断言类型

如果不想单独定义 state 接口,也可以直接给初始空数组指定元素类型:

const initialArticleState = {
  analysers: [] as Update_AnalyserState[],
};

这种写法更简洁,适合简单状态的场景。

优化建议

建议你给articleReducerAction联合类型中的UPDATE_ANALYSER对应 action 显式定义 payload 类型,确保传入的 payload 结构符合Update_AnalyserState的要求,避免运行时出现结构不匹配的问题:

interface UpdateAnalyserAction {
  type: typeof ActionType.UPDATE_ANALYSER
  payload: Update_AnalyserState
}
// 将上述类型合并到你的articleReducerAction联合类型中即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:15:03