Vue 3 中的类型化事件?
Typed events in Vue 3?
目前我正在手动投射一个事件:
const emit = defineEmits<{
(e: 'update:modelValue', value: string | number): void
}>()
// [..]
<input
type="text"
:value="modelValue"
@input="emit('update:modelValue', ($event.target as // manually
HTMLInputElement).value)" // casted
/>
还有比这更好的方法吗?有什么办法可以强制转换它吗?
提示:我在这里没有使用 v-model
,因为显示的代码是组件的一部分(然后将在组件上使用 v-model
)
您可以使用函数代替 in-lining 它来制作更好的模板,但它不会改变您必须转换它,如 official docs[=14= 所示]
还想指出这个问题有点误导,因为
const emit = defineEmits<{
(e: 'update:modelValue', value: string | number): void
}>()
与模板中的@input
无关。将它包含在问题中让我一开始认为您期望 defineEmits
会影响它。
目前我正在手动投射一个事件:
const emit = defineEmits<{
(e: 'update:modelValue', value: string | number): void
}>()
// [..]
<input
type="text"
:value="modelValue"
@input="emit('update:modelValue', ($event.target as // manually
HTMLInputElement).value)" // casted
/>
还有比这更好的方法吗?有什么办法可以强制转换它吗?
提示:我在这里没有使用 v-model
,因为显示的代码是组件的一部分(然后将在组件上使用 v-model
)
您可以使用函数代替 in-lining 它来制作更好的模板,但它不会改变您必须转换它,如 official docs[=14= 所示]
还想指出这个问题有点误导,因为
const emit = defineEmits<{
(e: 'update:modelValue', value: string | number): void
}>()
与模板中的@input
无关。将它包含在问题中让我一开始认为您期望 defineEmits
会影响它。