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

TypeScript+React映射Redux数组传参遇TS2739错误求助

解决React+Redux遍历数组传递props时的TS2739错误

我尝试遍历从Redux store加载的数组并将信息传递给子组件,触发了TS2739错误:

Type 'ReactElement<any, any>' is missing the following properties from type 'TaskProps': id, name, slug, status

相关代码

Redux Store数据结构

tasks: {
    results: [
        {
            id: number,
            name: string
        }
    ]
}

子组件TaskTableRow

interface TaskProps {id: number, name: string}

const TaskTableRow: FC<TaskProps> = ({id, name}) => {
    return(
        <tr>
            <td>{id}</td>
            <td>{name}</td>
        </tr>
    )
}
export default TaskTableRow

父组件TaskTable

interface TaskProps {id: number, name: string}

const TaskTable = () => {
    const tasks = useSelector((state: TasksState) => state.tasks)

    const content = tasks.results ?
        tasks.results.map<TaskProps>(
            item => <TaskTableRow id={item.id} name={item.name} />
        ) : []

    return (
        <tbody>
            { content }
        </tbody>    
    );
}
export default TaskTable

错误原因

核心问题出在map方法的泛型声明上:你给map指定的泛型是TaskProps,但map回调返回的是<TaskTableRow />这个React元素(类型为ReactElement),和你指定的TaskProps类型完全不匹配,TypeScript因此抛出类型不兼容的错误。

另外错误提示里提到的slug和status,你的TaskProps接口里并没有这两个属性,可能是旧代码缓存未更新,或者Redux store中的数据实际包含这两个字段但未在接口中声明。

解决方案

  1. 移除多余的泛型声明(推荐):TypeScript会自动根据回调的返回值推断类型,无需手动指定:
const content = tasks.results ?
    tasks.results.map(
        item => <TaskTableRow id={item.id} name={item.name} />
    ) : []
  1. 显式指定正确的泛型类型:如果一定要手动指定,应该声明为React元素类型:
import { ReactElement } from 'react';

// ...

const content = tasks.results ?
    tasks.results.map<ReactElement>(
        item => <TaskTableRow id={item.id} name={item.name} />
    ) : []
  1. 排查slug和status的问题:
    • 重启VS Code或TypeScript语言服务,清除旧代码缓存
    • 检查Redux store中tasks.results的实际数据结构,同步更新TaskProps接口或调整Redux的类型定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:45:39