https://github.com/xiaoxiangmoe/issue-vue-2.7-on-click-type-error.git
pnpm run type-check
src/App.vue:12:6 - error TS2559: Type '{ onClick: any; }' has no properties in common with type 'Readonly<Partial<{}> & Omit<Readonly<ExtractPropTypes<{ border: { type: PropType<boolean>; }; }>>, never>>'.
12 <HelloWorld @click="handleClick" />
~~~~~~~~~~
Found 1 error in src/App.vue:12
HelloWorld.vue
<script setup lang="ts">
interface ButtonProps {
border?: boolean;
}
const props = defineProps<ButtonProps>()
defineEmits<{
(event: 'click',payload: MouseEvent): void
}>()
</script>
<template>
<div id="app">
<button @click="$emit('click', $event)">Click me</button>
</div>
</template>
这个错误自从vue-tsc 1.7.12出现以来。
6条答案
按热度按时间lc8prwob1#
看起来像是 Vue2 类型问题。它没有将 emits 转换为 props。
gkn4icbw2#
@LinusBorg,请问您能帮忙将这个内容转移到vuejs/vue吗?谢谢。
qlfbtfca3#
blmhpbnm4#
同时看到了类似的内容。
我不认为自己真的在做任何特别的事情。
Shim文件(移除似乎不会改变任何东西):
使用
vue-tsc --noEmit
和这个配置文件进行类型检查:从这个配置文件继承:
bnl4lu3b5#
看起来在HelloWorld.vue中定义的props与在App.vue中使用的props类型不匹配。你需要确保传递给HelloWorld组件的props与预期的props相匹配。
hmae6n7t6#
在Vue3中,我们将
v-on:xxx
转换为onXxx
,并将其作为prop传递给需要进行类型检查的emit。Vue3会自动将事件转换为props,但Vue2不会。仅供参考@ZAID-BAARAB