Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

263
Visualizações
Vue 3 defineEmits rompe los tipos de defineProps

Estoy usando Vue 3 y TS 4.4. Tengo un componente que define sus tipos de accesorios con defineProps . Cuando agrego una llamada a defineEmits , VS Code comienza a decirme que mi variable de props no existe en la plantilla del componente. Aquí está el código fuente:

 <script setup lang="ts"> import { defineProps, defineEmits, VueElement, defineComponent } from "vue"; const emit = defineEmits<{ "update:checked": boolean; }>(); const props = defineProps<{ label?: VueElement | string; checked?: boolean; }>(); </script> <template> <label> <input type="checkbox" :checked="props.checked" @change="(event) => emit('update:checked', (event.target as any)?.checked)" /> {{ props.label }} </label> </template>

Y un par de capturas de pantalla para mostrar mejor lo que veo en VS Code. Esto es después de agregar defineEmits :

Error de código VS TS

Y esto es sin defineEmits :

Código VS sin error TS

¿Cuál es la forma correcta de definir tipos tanto para accesorios como para emisiones?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El argumento genérico defineEmits<T>() es esencialmente una interfaz de TypeScript que define solo funciones , que reciben un nombre de evento específico y argumentos opcionales:

 interface Emits { (e: __EVENT1_NAME__ [, arg1: __ARG1_TYPE__ [, arg2: __ARG2_TYPE__]]...): void (e: __EVENT2_NAME__ [, arg1: __ARG1_TYPE__ [, arg2: __ARG2_TYPE__]]...): void }

Ejemplos:

 // as inline type const emits = defineEmits<{ (eventName: 'hover', hovering: boolean): void (eventName: 'changed', newValue: number, id: string): void }>()
 // as interface interface Emits { (eventName: 'hover', hovering: boolean): void (eventName: 'changed', newValue: number, id: string): void } const emits = defineEmits<Emits>()
 // as type alias type Emits = { (eventName: 'hover', hovering: boolean): void (eventName: 'changed', newValue: number, id: string): void } const emits = defineEmits<Emits>()

Para su evento update:checked , el código debería ser similar al siguiente:

 // as inline type const emits = defineEmits<{ (e: 'update:checked', checked: boolean): void }>()
 // as interface interface Emits { (e: 'update:checked', checked: boolean): void } const emits = defineEmits<Emits>()
 // as type alias type Emits = { (e: 'update:checked', checked: boolean): void } const emits = defineEmits<Emits>()
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda