Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Como resolvi o erro TS7016 no Vue (Vue Router + TypeScript)

Como resolvi o erro TS7016 no Vue (Vue Router + TypeScript)

Recentemente me deparei com um erro chato em um projeto Vue:

TS7016: Could not find a declaration file for module 'vue-router'

O projeto simplesmente não compilava, mesmo com tudo aparentemente instalado corretamente.


O que estava funcionando

  • Vue 3 instalado corretamente
  • Vue Router 4 instalado corretamente
  • TypeScript atualizado
  • Dependências instaladas sem erros

Ou seja: teoricamente tudo certo.


Investigando o problema

A primeira suspeita foi que o Vue Router não estivesse instalado corretamente.

Executei alguns comandos para verificar:

npm list vue
npm list vue-router
npm list typescript

O resultado mostrou que:

  • Vue 3 estava instalado
  • Vue Router 4 estava instalado
  • TypeScript estava presente no projeto

Portanto, o problema não era uma dependência ausente.


Analisando o package.json do Vue Router

Ao verificar o arquivo:

node_modules/vue-router/package.json

encontrei a seguinte configuração:

"types": "dist/vue-router.d.mts"

Isso significa que os tipos do Vue Router estavam disponíveis, mas utilizando o formato moderno .d.mts.


A causa do erro

No arquivo tsconfig.json, encontrei a seguinte configuração:

"moduleResolution": "node"

Essa configuração é compatível com projetos mais antigos, mas pode apresentar problemas ao resolver pacotes modernos que utilizam:

  • ESM (ECMAScript Modules)
  • Export Maps (exports)
  • Arquivos .d.mts

Como consequência, o TypeScript não conseguia localizar corretamente os tipos do Vue Router.


A solução

Bastou alterar a configuração do TypeScript.

Antes

{
  "compilerOptions": {
    "moduleResolution": "node"
  }
}

Depois

{
  "compilerOptions": {
    "moduleResolution": "bundler"
  }
}

Após a alteração:

  1. Reiniciei o VS Code.
  2. Executei novamente:
npm run serve

O erro TS7016 desapareceu.


Outro problema encontrado

Depois de corrigir o TypeScript, surgiram erros relacionados a importações de componentes:

Module not found: Can't resolve '../components/MeuFormulario.vue'

O problema estava nos caminhos relativos.

Exemplo incorreto

import MeuFormulario from '../components/MeuFormulario.vue'

Exemplo corrigido

import MeuFormulario from '@/components/MeuFormulario.vue'

ou

import MeuFormulario from '../../MeuFormulario.vue'

dependendo da estrutura do projeto.


Resultado final

Após corrigir:

  • Configuração do TypeScript
  • Resolução de módulos
  • Caminhos dos componentes

o projeto voltou a funcionar normalmente.

npm run serve

Compilação concluída com sucesso.


Lições aprendidas

  • Nem todo erro de tipagem indica falta de dependência.
  • O Vue Router 4 já possui seus próprios tipos.
  • O problema pode estar na configuração do TypeScript.
  • moduleResolution: "bundler" é mais adequado para projetos Vue modernos.
  • Verificar caminhos relativos pode evitar horas de depuração.

Tecnologias utilizadas

  • Vue 3
  • Vue Router 4
  • TypeScript 5
  • Vue CLI 5

Conclusão

Quando encontrar o erro:

TS7016: Could not find a declaration file for module 'vue-router'

não assuma imediatamente que faltam dependências ou pacotes de tipos.

Antes disso, verifique:

  • A versão do TypeScript
  • A configuração do tsconfig.json
  • O modo de resolução de módulos
  • A estrutura dos imports do projeto

Uma pequena alteração na configuração pode ser suficiente para resolver o problema e colocar o projeto novamente em funcionamento.

1 resposta

Olá, amigo.
Abordagem interessante!
O mais comum na nossa área é resolver um problema e, logo em seguida, aparecerem outros três. Faz parte do processo.
A verdade é que ganhamos experiência à medida que resolvemos esses erros e enfrentamos os novos desafios que surgem pelo caminho.
Cada investigação, teste e correção acrescenta conhecimento que levamos para as próximas situações.
O importante é não desistir.
A capacidade de investigar, entender o fluxo do sistema e identificar a causa raiz dos problemas é o que diferencia profissionais que apenas executam daqueles que realmente evoluem e agregam valor.
Parabéns pela solução e por compartilhar o aprendizado!
Bons estudos.