Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue 3+;Typescript发出函数";没有与此调用匹配的重载“;即使函数名已定义。看起来秩序很重要_Typescript_Vue.js_Vue Cli_Vuejs3 - Fatal编程技术网

Vue 3+;Typescript发出函数";没有与此调用匹配的重载“;即使函数名已定义。看起来秩序很重要

Vue 3+;Typescript发出函数";没有与此调用匹配的重载“;即使函数名已定义。看起来秩序很重要,typescript,vue.js,vue-cli,vuejs3,Typescript,Vue.js,Vue Cli,Vuejs3,当我将Vue 3 emit函数与TypeScript一起使用时,发现了一条奇怪的错误消息。 要复制的示例代码: export default defineComponent({ emits: { emit1: (payload: number) => payload, emit2: (payload: string) => payload }, methods: { ... } } 当我尝试按如下方式调用emit1时,它编译时不会出错: thi

当我将Vue 3 emit函数与TypeScript一起使用时,发现了一条奇怪的错误消息。 要复制的示例代码:

export default defineComponent({
  emits: {
    emit1: (payload: number) => payload,
    emit2: (payload: string) => payload
  },
  methods: {
   ...
  }
}
当我尝试按如下方式调用emit1时,它编译时不会出错:
this.$emit(“emit1”,1)

但如果我做了以下操作,就会出现奇怪的错误:
this.$emit(“emit1”,“test”)

如果我更改发射函数的顺序,如下所示:

export default defineComponent({
  emits: {
    emit2: (payload: string) => payload,
    emit1: (payload: number) => payload
  },
  methods: {
   ...
  }
}
当然也会出现一个错误,但这个错误至少更有意义:

TS2769: No overload matches this call.
  The last overload gave the following error.
    Argument of type 'boolean' is not assignable to parameter of type 'number'.
由于在这两种情况下都定义了函数名,因此错误消息#1没有意义,但#2有意义

我的问题是:

  • 为什么函数的顺序会对错误消息产生影响
  • 是否应该/是否可以在vue中修复此问题,以使错误在这两种情况下都有意义?Mybe这也是TypeScript本身的问题吗

使用最新的Vue CLI版本时,以下是使用
emit
order收到的完整错误。切换发射顺序时,仍会以相反顺序显示两条错误消息:

TS2769:没有与此调用匹配的重载。
重载1/2'(事件:“emit1”,有效负载:number):void',给出了以下错误。
类型为“test”的参数不能分配给类型为“number”的参数。
重载2/2'(事件:“emit2”,有效负载:string):void',给出了以下错误。
类型为“emit1”的参数不能分配给类型为“emit2”的参数。
这就清楚地说明了发生了什么,但是由于您只能看到其中一条消息,因此非常混乱:

  • Vue正在针对所有可能匹配的
    emit
    条目(即重载)测试emit。方法中使用的发射名称和发射值都作为参数提供给测试函数。在这里可以看到
    事件
    有效负载
    作为参数传递

  • 对于一个重载,
    事件
    参数具有匹配项,但
    参数会导致类型错误。对于另一个,没有
    事件
    匹配

TS2769: No overload matches this call.
  The last overload gave the following error.
    Argument of type 'boolean' is not assignable to parameter of type 'number'.