Vue 组件 Emits 怎么在 TypeScript 中声明事件类型

秋静酱_1810

秋静酱_1810

2026-10-22

389人浏览

原创

vue组件emits的typescript类型声明核心是defineemits泛型函数签名,支持事件名、参数个数与类型的精准推导和校验,确保ide跳转、编译报错及重构联动;推荐中使用泛型声明,如defineemits(),支持重载;也可用数组声明+const断言或扩展第三方库类型,父子组件事件参数类型自动对齐校验。

vue 组件 emits 怎么在 typescript 中声明事件类型

Vue 组件的 emits 在 TypeScript 中声明事件类型,核心是用 defineEmits 配合泛型函数签名,让事件名、参数个数和类型全部可推导、可校验。不是加个注释,而是让 IDE 能跳转、编译器能报错、重构时能联动更新。

用泛型声明精确的事件签名

这是最推荐的方式,尤其适合 <script setup></script> 场景。每个事件对应一个函数签名,参数顺序和类型都明确:

  • defineEmits() —— 表示组件可触发 submit(带一个 FormData 参数)或 cancel(无参)
  • 多个同名事件?可以重载:(e: 'change', value: string): void; (e: 'change', value: number): void
  • 返回的 emit 函数会严格校验调用:写 emit('submit', 123) 就直接报错,因为类型不匹配

运行时声明 + 类型断言(兼容简单场景)

如果暂时不想写泛型,或需动态判断事件合法性,可用数组形式声明事件名,再配合类型断言保障参数安全:

vue-composition-api-best-practices
vue-composition-api-best-practices

Vue 3 组合式 API 与

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 17.2万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.7万人学习