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

VueJS中如何修复‘Type 'void' is not assignable to type 'Function'’错误?

问题分析与解决

错误原因

你在父组件传递actionDelete时,直接执行了actionDelete(media.uuid),这会立刻调用该函数并将它的返回值(此处为void)传给子组件的actionDelete属性,但子组件期望接收的是函数类型的值,因此触发了类型不匹配的报错。

解决方案

有两种常用的修正方式:

方式一:用箭头函数包裹调用逻辑

在父组件中用箭头函数把删除操作的调用逻辑包起来,这样传递给子组件的就是一个函数,只有当子组件触发点击事件时才会执行:

<MediaItemComponent :media="media" :actionDelete="() => actionDelete(media.uuid)" />

方式二:直接传递函数引用,子组件调用时传参

如果父组件的actionDelete本身就是接收uuid参数的函数,可以直接传递函数引用,子组件点击时再传入对应的参数:

  • 父组件传递函数引用:
<MediaItemComponent :media="media" :actionDelete="actionDelete" />
  • 子组件的点击事件保持原有写法即可(已包含参数传递):
<q-btn @click="actionDelete(media.uuid)">Delete</q-btn>

优化TypeScript类型定义

为了让类型检查更严谨,可以给actionDelete属性指定更精确的类型,避免传入不符合要求的函数:

const props = defineProps({
  media: {
    type: Object as PropType<MediaItem>,
    required: true
  },
  actionDelete: {
    // 明确是接收string类型uuid参数、返回值为void的函数
    type: Function as PropType<(uuid: string) => void>,
    required: true
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:46:23