了解です!
ではリクエストどおり、少し飛んで コラム: よくある落とし穴とその回避策「emitの型不一致」 を書きます。
Composition API の defineEmits を使うと型安全に emit ができるはずなのに、
次のような問題が起きがちです。
<!-- ParentComponent.vue -->
<ChildComponent :count="count" @increment="incrementCount" />
<!-- ChildComponent.vue -->
<script lang="ts" setup>
interface Props {
count: number;
}
const props = defineProps<Props>();
const emit = defineEmits<{
(event: 'increment', payload: number): void;
}>();
// payloadを渡す想定なのに…
function increment() {
emit('increment'); // ❌ payload が足りない → 型エラー(またはランタイムエラー)
}
</script>
emit('increment') なのに payload: number が必須| 問題点 | 説明 |
|---|---|
| 定義と使い方がズレる | defineEmits で payloadあり → でも実際は渡していない |
| イベント名は合っている | でも引数の個数・型が合っていない |
| TypeScript が補完してくれない | 型定義を省略した場合に発生 |
defineEmits に正しい型を定義する