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

React TypeScript 子组件调用父传函数prop报ts(2349)如何解决?

问题原因

React函数组件的第一个参数是整个props对象,你当前子组件的定义是把整个props对象赋值给了addFriend变量,该变量的类型是你定义的FuncProps接口类型(包含addFriend属性的对象),而非你预期的函数类型,因此调用时会抛出「不存在调用签名」的错误。

修复方案

方案1(推荐):解构props属性

修改子组件的参数定义,直接从props中解构出addFriend函数即可:

// 仅修改组件定义的第一行即可
const UserDetail = ({ addFriend }: FuncProps) => {
  // 其余代码保持不变
  const { userId } = useParams<UserIdParams>();
  const { data, done } = useFetchOne(
    `https://jsonplaceholder.typicode.com/users/${userId}`
  );

  const handleClick = () => {
    const friend: FriendListItem = {
      id: data!.id,
      name: data!.name,
      address: data!.address.street,
    };
    addFriend(friend);
  };
}

方案2:访问props下的方法属性

如果不解构,调用时需要从props对象下取addFriend属性再调用:

const handleClick = () => {
  const friend: FriendListItem = {
    id: data!.id,
    name: data!.name,
    address: data!.address.street,
  };
  // 从props对象中访问addFriend方法
  addFriend.addFriend(friend);
};

额外优化建议

你可以把FriendListItem接口抽离到公共的类型定义文件中,避免父子组件重复定义,后续修改字段时只需改一处即可保证类型同步。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:06:03