ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

mitt 3.0新版本带来的问题 is not assignable to parameter of type 'Handler<unknown>

2021-10-02 12:31:25  阅读:262  来源: 互联网

标签:assignable void ValidateFunc emitter handler 3.0 type mitt


问题描述

报错信息如下所示:

TS2769: No overload matches this call.
  Overload 1 of 2, '(type: "*", handler: WildcardHandler<Record<EventType, unknown>>): void', gave the following error.
    Argument of type '"form-item-created"' is not assignable to parameter of type '"*"'.
  Overload 2 of 2, '(type: "form-item-created", handler?: Handler<unknown> | undefined): void', gave the following error.
    Argument of type '(func: ValidateFunc) => void' is not assignable to parameter of type 'Handler<unknown>'.
    47 |     onUnmounted(() => {
    48 |       // 删除监听
  > 49 |       emitter.off('form-item-created', callback)
       |       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    50 |       funcArr = []
    51 |     })
    52 |

原因

mitt 的定义文件有所升级

解决

修改前的代码

import mitt from 'mitt'

type ValidateFunc = () => boolean
export const emitter = mitt()

emitter.emit('formItemCreated', validateInput)

  // 将监听得到的验证函数都存到一个数组中
  const callback = (func: ValidateFunc) => {
    funcArr.push(func)
  }
  // 添加监听
  emitter.on('formItemCreated', callback)
  onUnmounted(() => {
    // 删除监听
    emitter.off('formItemCreated', callback)
    funcArr = []
  })

修改后的代码

import mitt from 'mitt'

type ValidateFunc = () => boolean

type Emits<EventType extends string | symbol, T> = {
  on(type: EventType, handler: (arg: T) => void): void
  off(type: EventType, handler: (arg: T) => void): void
  emit(type: EventType, arg: T): void
}

type Emitter = Emits<'form-item-created', ValidateFunc>

export const emitter: Emitter = mitt<Emitter>()

    ...

标签:assignable,void,ValidateFunc,emitter,handler,3.0,type,mitt
来源: https://www.cnblogs.com/tudou1179006580/p/15361701.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有