vue.js - TypeScript chyba 'Typ '($event: any) => void' nie je priraditeľný k typu', keď sa počúva udalosť vo Vue 3


Kód komponentu:

<h2 @click="handleEvent(post.id)">{{ post.title }}</h2>

function handleEvent(id: number) {
  router.push("/post/" + id);
}

Chyba Typescriptu:

Type '($event: any) => void' is not assignable to type 'MouseEvent'.ts(2322)
__VLS_types.ts(107, 56): The expected type comes from property 'click' which is declared here on type 'EventObject<undefined, "click", {}, MouseEvent | undefined>'

Aký je problém?

Odpoveď č. 1

Ako rozumiem, v tejto záležitosti máme 2 možnosti:

  1. pridať @types/node: '18.8.0'
  2. počkaj, kým sa táto zmena nezlúči do vydania Vue 2.7

poznámka: Nepoužívajte ^, pevne nastavte verziu na 18.0.0

Nainštaloval som opravenú verziu @types/node a funguje mi to.

Odpoveď č. 2

TL;DR: Downgrade @types/node na 18.8.0, kým nie je vydaný vue 3.2.41.

Za posledných niekoľko dní sme narazili na rovnaký problém, ale myslíme si, že sme našli riešenie.

Ukázalo sa, že ide o konflikt medzi vue 3.2.40 a @types/node 18.8.5. Súčasná verzia Vue nie je kompatibilná (ale 3.2.41 by to mala vyriešiť) s najnovšími typmi Node.

Kroky, ktoré som urobil na vyriešenie problému:

  1. Vrátiť @types/node na 18.8.0 bez ^
  2. Odstráňte node modules - tu je užitočný skript, ktorý na to používame: find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \; pretože používame monorepo s yarn workspaces
  3. Preinštalovať závislosti
  4. Obnoviť VS Code - cmd+shift+p, zadajte do vyhľadávania Developer: Reload Window

Súvisiace články