Tengo un problema con la pelusa de mi Vue SPA. Estoy usando la función defineEmits del azúcar sintáctico de configuración del script ( https://v3.vuejs.org/api/sfc-script-setup.html ). Los errores simplemente no tienen ningún sentido, ¿alguien sabe cómo solucionar esto (sin deshabilitar estas reglas para los archivos afectados, porque sucede con cada uso de defineEmits). Lo raro es que la función defineProps funciona sin errores, que sigue la misma sintaxis. ¿Puede alguien ayudarme aquí?
Mi linter se queja de estos errores:
22:14 error Unexpected space between function name and paren no-spaced-func 22:27 error Unexpected whitespace between function name and paren func-call-spacing 23:3 error 'e' is defined but never used no-unused-vars 23:27 error 'value' is defined but never used no-unused-varsCódigo que genera estos errores (defineEmits es la fuente de todos los errores:
<script lang="ts" setup> const emit = defineEmits<{ (e: 'update:modelValue', value: string): void }>() defineProps<{ modelValue: string name: string items: string[] }>() const onInput = (e: Event) => { emit('update:modelValue', (e.target as HTMLInputElement).value) } </script>Mi archivo linting eslintrs.js (las reglas compartidas importadas no modifican las reglas de las que se queja eslint):
const path = require('path') const prettierSharedConfig = require(path.join(__dirname, '../prettier-shared-config.json')) module.exports = { settings: { 'import/resolver': { typescript: {}, node: { extensions: ['.js', '.ts', '.vue'], }, }, }, env: { browser: true, es2021: true, 'vue/setup-compiler-macros': true, }, extends: ['plugin:vue/essential', 'airbnb-base'], parserOptions: { ecmaVersion: 13, parser: '@typescript-eslint/parser', sourceType: 'module', }, plugins: ['vue', '@typescript-eslint'], rules: { ...prettierSharedConfig.rules.shared, 'vue/multi-word-component-names': 'off', 'vue/no-multiple-template-root': 'off', }, }Actualizar:
Investigué un poco más y vi que esto sucedía:
type EmitsType = { (e: 'update:modelValue', value: string): void } const emit = defineEmits<EmitsType>()Con la siguiente salida de pelusa:
23:3 error 'e' is defined but never used no-unused-vars 23:27 error 'value' is defined but never used no-unused-varsParece que el linter no puede procesar adecuadamente estos tipos.
No encontré una respuesta ideal, pero mi solución actual es usar una sintaxis de defineEmits diferente.
defineEmits(['update:modelValue'])La desventaja de esto es que no escribe el valor del parámetro de emisión, pero no pude encontrar otra forma de hacerlo funcionar.