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

React+TS报错:Type 'TodoModel'无法赋值给type 'ReactNode'

报错根因

报错Type 'TodoModel' is not assignable to type 'ReactNode'是因为你将整个TodoModel类型的对象直接传给了Material UI的ListItemText组件的primary属性。该属性仅支持传入可渲染的React节点(字符串、数字、合法JSX等),无法直接渲染自定义TS对象。

修复方案

找到代码里传参错误的行:

{/* 错误写法:直接传入整个todo对象 */}
<ListItemText style={{ color: "#f1f1ef" }} primary={todo} />

将primary的取值改为TodoModel中存储待办文本内容的具体字段即可,具体字段名和你定义TodoModel类型时的命名保持一致,常见命名为todo/content/text。
举个例子,如果你的TodoModel类型定义如下:

type TodoModel = {
  id: number;
  todo: string; // 存储待办内容的字段
  isCompleted: boolean;
}

那错误行修改为:

{/* 正确写法:传入具体的文本字段 */}
<ListItemText style={{ color: "#f1f1ef" }} primary={todo.todo} />
可选优化

你当前removeTodo方法内的filter回调参数名和外层props的todo重名,虽然不会触发运行时错误,但会降低代码可读性,建议修改回调参数名避免变量遮蔽:

const removeTodo = (id: number) => {
  // 将回调参数重命名为item,和外层todo区分
  setTodos(todos.filter(item => item.id !== id));
};

修复后类型校验会直接通过,页面也能正常渲染待办内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:21:28