2
respostas

[Bug] Erro com o vue-router

Estou com um problema ao usar Vue Router com TypeScript, recebendo o seguinte erro:

ERROR in src/roteador/index.ts:1:68
TS2307: Cannot find module 'vue-router' or its corresponding type declarations.

O erro acontece nesta importação:
import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";

Tentei resolver com ajuda de IA para entender onde poderia estar o problema, e uma das sugestões foi remover o uso do RouteRecordRaw (tipagem das rotas). O código recomendado pelo professor era assim:

import { createRouter, createWebHashHistory, RouteRecordRaw } from "vue-router";
import Tarefas from '../views/Tarefas.vue'

const rotas: RouteRecordRaw[] = [{
    path: '/',
    name: 'Tarefas',
    component: Tarefas
}]

const roteador = createRouter({
    history: createWebHashHistory(),
    routes: rotas
})

export default roteador;

Além de remover a tipagem, foi sugerido no arquivo shims-vue.d.ts, adicionar o declare module 'vue-router';

/* eslint-disable */

declare module 'vue-router';

declare module '*.vue' {
  import type { DefineComponent } from 'vue'
  const component: DefineComponent<{}, {}, any>
  export default component
}

Pelo que entendi, a linha declare module 'vue-router' força o TypeScript a aceitar o módulo, mas acaba desativando a tipagem dele, então não parece ser a melhor prática e provavelmente só deveria ser usada como último recurso.

Foi a única forma que encontrei para fazer funcionar, mas fiquei na dúvida se esse é realmente o caminho correto ou se existe uma solução mais adequada para esse erro.

2 respostas

Salve, Matheus!

Eu configurei um projeto aqui do zero e funcionou direitinho, coloquei aqui no github: https://github.com/viniciosneves/vue3-ts-router

Sem ver o seu projeto, fica mais difícil de entender a causa raiz. Vou colocar aqui algumas possíveis razões:

  1. Garantir que o vue-router tá instalado direitinho no projeto (vale sempre rodar um npm i)
// package.json
{
  "dependencies": {
    "pinia": "^3.0.4",
    "vue": "^3.5.26",
    "vue-router": "^4.6.4"
  },
}
  1. O tsconfig.app.json estende @vue/tsconfig
{
  "extends": "@vue/tsconfig/tsconfig.dom.json",
  "include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
  "exclude": ["src/**/__tests__/*"],
  "compilerOptions": {
    "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",

    "paths": {
      "@/*": ["./src/*"]
    }
  }
}

Esse preset @vue/tsconfig/tsconfig.dom.json traz configurações importantes como:

  • moduleResolution: "bundler" (ou node)
  • esModuleInterop: true
  • strict: true

Qualquer coisa sobe seu projeto pro Github e manda o link aqui!

Olá, pessoal! Tudo bem?

Tive um problema que, pela descrição do Matheus, parecia ser igual. Consegui resolver fazendo o seguinte:

Acessei a pasta do projeto pelo terminal e rodei os seguintes comandos:

npm uninstall vue-router
npm install vue-router@4.0.12
npm run serve

Espero que isso resolva!