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:
- pridať @types/node: '18.8.0'
- 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:
- Vrátiť
@types/nodena18.8.0bez^ - 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 - Preinštalovať závislosti
- Obnoviť VS Code -
cmd+shift+p, zadajte do vyhľadávaniaDeveloper: Reload Window