vue3+ts中使用mitt跨组件通信报错:没有与此调用匹配的重载。handler: WildcardHandler<Record<EventType, unknown>>

这篇具有很好参考价值的文章主要介绍了vue3+ts中使用mitt跨组件通信报错:没有与此调用匹配的重载。handler: WildcardHandler<Record<EventType, unknown>>。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

报错内容如下图:
vue3+ts中使用mitt跨组件通信报错:没有与此调用匹配的重载。handler: WildcardHandler<Record<EventType, unknown>>
vue3+ts中使用mitt跨组件通信报错:没有与此调用匹配的重载。handler: WildcardHandler<Record<EventType, unknown>>

mitt代码的使用方式:

import { onMounted } from vue;
import mittBus from '@/utils/mittBus';

onMounted(() => {
  mittBus.on('getFlowTableRowDetail'/*自定义监听事件名称,相当于下面的foo*/, getFlowTableRowDetail);
});
interface LoadParams {
  date: string;
  dataId: string;
}
function getFlowTableRowDetail(data: LoadParams){/* 省略内容 */}

mittBus.js文件:

import mitt from "mitt";
const mittBus = mitt();
export default mittBus;

经过多方资料查阅,总结出问题出现的原因是ts中的类型推断异常。mittBus的参数无法推断出来。

如果使用的是最新的mitt@3.0.0版本,在ts中使用mitt时需要添加类型注解,去官网查阅使用方式如下:

Usage

1、Set “strict”: true in your tsconfig.json to get improved type inference for mitt instance methods.

import mitt from 'mitt';

type Events = {
  foo: string;
  bar?: number;
};
// inferred as Emitter<Events>  // 推断为发射器<事件>
const emitter = mitt<Events>();

// 'e' has inferred type 'string'  // “e”具有推断的类型“string”
emitter.on('foo', (e) => {});

// Error: Argument of type 'number' is not assignable to parameter of type 'string'. (2345)  // 错误:类型为“number”的参数不能分配给类型为“string”的参数。(2345)
emitter.emit('foo', 42); 

2、Alternatively, you can use the provided Emitter type:

import mitt, { Emitter } from 'mitt';

type Events = {
  foo: string;
  bar?: number;
};

const emitter: Emitter<Events> = mitt<Events>();

这里我使用了第二种,mitt提供的Emitter类型。

官方示例里面因为使用的事件名称是固定的:foobar。但是我的代码里面事件名称是自定义的,所以此处不能直接写死,故使用一个字符串索引签名,这样事件名称可以自定义。如:我的项目代码中的事件名称自定义为getFlowTableRowDetail

修改mittBus.js文件代码如下:

import mitt, { Emitter } from "mitt";

// 定义类型别名,因全局使用并且需要自定义事件名称,所以使用索引签名定义内容
type Events = {
  [propName: string]: any;
};
// 提供泛型参数让 emitter 能自动推断参数类型
const mittBus: Emitter<Events> = mitt<Events>();
export default mittBus;

改完代码之后,类型推断异常消失,可以准确推断所需参数的类型了。
vue3+ts中使用mitt跨组件通信报错:没有与此调用匹配的重载。handler: WildcardHandler<Record<EventType, unknown>>
vue3+ts中使用mitt跨组件通信报错:没有与此调用匹配的重载。handler: WildcardHandler<Record<EventType, unknown>>文章来源地址https://www.toymoban.com/news/detail-421808.html

到了这里,关于vue3+ts中使用mitt跨组件通信报错:没有与此调用匹配的重载。handler: WildcardHandler<Record<EventType, unknown>>的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • UVeiw 组件的使用(更多自定义案例和解决方案),Vue3 +ts 版本 #Selected组件 #Vue 3 # Ts
  • uniapp vue3版本+ts使用 vant小程序 组件库

    1.首先从uniapp官网下载vue3版本+ts的模板 2.安装vant微信小程序版本 3.在项目src目录创建wxcomponents文件夹,在wxcomponents文件夹下创建vant文件夹 4.从node_modules文件夹下的@vant文件夹里面的weapp,weapp下的dist文件夹,将dist文件夹里面的文件复制到/wxcomponents/vant 5.全局引用   在 pages

    2024年02月13日
    浏览(39)
  • vue3+ts未使用变量报错的解决

    vue3+ts未使用变量报错的解决

    tsconfig.json文件中开启了ts语法检查 根据需求将对应的语法检查设置为false即可,但是语法检查是为了保障我们的代码合法性避免之后不可预见的错误最好开启语法检查如果有特定的需要可以使用//@ts-ignore来关闭语法检查

    2024年02月14日
    浏览(12)
  • VUE3+Ts使用高德地图组件@vuemap/vue-amap语法检测Amap is not defind

    VUE3+Ts使用高德地图组件@vuemap/vue-amap语法检测Amap is not defind

    踩坑记录:最近项目中用到了@vuemap/vue-amap高德地图组件,正常配置完成后,引入官方示例,地图正常出现,可以正常编译不出错,但是代码提示给我整了个这。 于是,开始查资料,为什么会出现这个情况,然后是因为在main.js导入的名字VueMap和高德自己全局暴露AMap不是一码事

    2024年02月06日
    浏览(11)
  • vue3中事件总线mitt(第三方库mitt)

    vue3中事件总线mitt(第三方库mitt)

    1.安装mitt:npm install mitt -save 2. 新建EventBus.js文件: 3.发出事件的页面:bb.vue 4.接收事件的页面:dd.vue 5.点击bb页面按钮:

    2024年02月14日
    浏览(41)
  • Vue3 + Vite + Ts自己封装的基础组件库发布npm ,npm安装使用(Volar )支持TS 类型提示功能(vite-plugin-dts 使用)

    Vue3 + Vite + Ts自己封装的基础组件库发布npm ,npm安装使用(Volar )支持TS 类型提示功能(vite-plugin-dts 使用)

    在开发Vue3 + Ts项目时:使用自己二次封装的基础组件,没有 Ts类型提示 ,不能像 Element-plus 鼠标停在标签或者属性上就能提示当前组件有哪些属性(即props)及其属性的类型,如下图是 Element-plus 组件的 使用Vs Code Volar的提示: 此插件的作用:为打包的库里加入声明文件(即生

    2024年02月09日
    浏览(15)
  • vue3 组件TS 类型声明

    要说今年最热门的前端技术,Vue3 和 TS 绝对榜上有名了。据了解,已经有很多公司在使用 Vue3 + TS + Vite 开发新项目了。那么我们也不能落后,今天就给大家分享一下如何在 Vue3 组件中结合 Composition-Api 使用 TS 类型。如果有不会或者不熟的小伙伴,一起学起来吧! 当使用 这被

    2023年04月08日
    浏览(10)
  • vue3探索——使用ref与$parent实现父子组件间通信

    在vue3中,可以使用vue3的API defineExpose() 函数结合 ref 或者 $parent ,实现父子组件数据的传递。 子组件:通过 defineExpose() 函数,向外暴露响应式数据或者方法 父组件:通过 ref 获取子组件实例,进而获取子组件暴露的响应式数据或方法 💡 你没看错!这里的 ref 就是经常用来定

    2024年02月10日
    浏览(10)
  • vue3全局事务总线mitt

    vue3中$on,$off 和 $once 实例方法已被移除,组件实例不再实现事件触发接口。可以使用Mitt库(其实就是发布订阅模式的设计) 安装 内置方法 发布事件 使用方法通过emit派发, on 方法添加事件,off 方法移除,clear 清空所有 新建mitt文件夹,index.ts 派发 获取  如果在setup中派

    2024年02月11日
    浏览(8)
  • 前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第十一章 基础界面开发 (组件封装和使用)

    前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第十一章 基础界面开发 (组件封装和使用)

    Vue 是前端开发中非常常见的一种框架,它的易用性和灵活性使得它成为了很多开发者的首选。而在 Vue2 版本中,组件的开发也变得非常简单,但随着 Vue3 版本的发布,组件开发有了更多的特性和优化,为我们的业务开发带来了更多便利。本文将介绍如何使用 Vue3 开发业务组件

    2024年02月19日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包