解决:不能将类型“(a?: number) => void”分配给类型“(payload: MouseEvent) => void”

在Vue3+UniApp的项目中,当函数在click事件和其他地方被调用并设置默认参数时,若不传值,click事件会将$event作为第一个参数。这导致预期的默认值未生效。解决方案是为click事件的函数调用提供默认参数,例如`clickFn(0)`,以避免类型冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题的出现:
做一个uniapp+vue3+ts的项目的时候,有个函数在button标签的click事件和其他方都有被调用,并且这个函数的入参有默认值。

以下是新创建的项目复现的代码:

<template>
  <button @click="clickFn">clickFn</button>
</template>

<script setup lang="ts">
import { onMounted } from 'vue';
function clickFn(a:number=0) {
  console.log("clickFn", a);
}
onMounted(()=>{
  console.log('其它要用到clickFn函数的地方')
  clickFn()
  clickFn(1)
})
</script>

运行结果:

 此时把鼠标悬浮在button标签的”click“上就出现了这个问题:

虽然底下有红线,但是也能用!

 按下按钮,预想”a“打印出来的是0,可结果是:

原因:click事件绑定的函数不传值时,click事件触发的函数第一个入参默认返回$event,类型是”MouseEvent“,如果绑定函数的第一个入参为其他类型(我的是number类型),就会出现这个问题(标题);触发click事件,函数的第一个入参输出的不是自己写的默认值,而是$event。

这么写:

<button @click="clickFn">clickFn</button>

 相当于:

<button @click="clickFn($event)">clickFn</button>


解决:给click事件绑定的函数给一个默认的入参就好了:

<button @click="clickFn(0)">clickFn</button>

红线消失:

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值