defineEmit
稳定性:
实验性
⚠️ 实验性功能,风险自负使用 defineEmit
逐个声明单个 emit。
特性 | 支持 |
---|---|
Vue 3 | ✅ |
Nuxt 3 | ✅ |
Vue 2 | ✅ |
TypeScript | ✅ |
Volar Plugin | ✅ |
WARNING
defineEmit
不能与 defineEmits
同时使用。
API 参考
ts
defineEmit<T>(emitName) defineEmit<T>(emitName, validator) // emitName 参数是可选的, // 并且可从变量名中推断出 const emitName = defineEmit<T>()
基本用法
vue
<script setup> // 声明 emit const increment = defineEmit('increment') // 从变量名中推断出 emit 名称 const change = defineEmit() // emit 事件 increment() </script>
带验证的用法
vue
<script setup> // 声明带验证的事件 const increment = defineEmit('increment', (value) => value < 20) </script>
TypeScript
vue
<script setup lang="ts"> const increment = defineEmit('increment', (value: number) => value < 20) const decrement = defineEmit<[value: number]>() increment(2) // pass increment('2') // TS type error</script>
Volar 配置
jsonc
{ "vueCompilerOptions": { "plugins": ["unplugin-vue-macros/volar"], "vueMacros": { "defineEmit": true, }, }, }