vue/valid-define-emits 正确性
它做了什么
此规则检查 defineEmits 编译器宏是否有效。
当出现以下情况时,该规则会报告 defineEmits 编译器宏:
defineEmits引用了本地声明的变量。defineEmits同时具有字面量类型和参数。例如:defineEmits<(e: 'foo')=>void>(['bar'])defineEmits被多次调用。- 自定义事件在
defineEmits和export default {}中都被定义。 - 自定义事件在
defineEmits与export default {}中均未被定义。
为什么这是问题?
错误使用 defineEmits 可能导致运行时错误、不清晰的组件契约以及类型安全性的丢失。 虽然 Vue 仍可能编译代码,但发出的事件可能会静默失败或类型不正确。
示例
此规则的错误代码示例:
vue
<script setup>
const def = { notify: null };
defineEmits(def);
</script>vue
<script setup lang="ts">
defineEmits<(e: "notify") => void>({ submit: null });
</script>vue
<script setup>
defineEmits({ notify: null });
defineEmits({ submit: null });
</script>vue
<script>
export default {
emits: ["notify"],
};
</script>
<script setup>
defineEmits({ submit: null });
</script>此规则的正确代码示例:
vue
<script setup>
defineEmits({ notify: null });
</script>vue
<script setup>
defineEmits(["notify"]);
</script>vue
<script setup lang="ts">
defineEmits<(e: "notify") => void>();
</script>vue
<script>
export default {
emits: ["notify"],
};
</script>
<script setup>
defineEmits();
</script>如何使用
要通过配置文件或 CLI 启用此规则,可以使用:
json
{
"plugins": ["vue"],
"rules": {
"vue/valid-define-emits": "error"
}
}bash
oxlint --deny vue/valid-define-emits --vue-plugin