Erro TS7006 no TypeScript: por que o parâmetro implicitamente recebe o tipo any e como corrigir

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: O erro "assustador" que na verdade é seu amigo



Você está escrevendo código em TypeScript, tudo vai bem, e de repente — bum! Sublinhado vermelho. O compilador resmunga descontente: "TS7006: Parameter 'xxx' implicitly has an 'any' type". Situação familiar? Se você já se deparou com esse erro pelo menos uma vez, não está sozinho. No Stack Overflow, essa pergunta acumulou milhares de visualizações, e todos os dias dezenas de desenvolvedores pesquisam "Typescript TS7006" em busca de uma resposta.



Mas vamos combinar desde já: esse erro não é um inimigo, e sim o melhor amigo do seu código. Ele força você a pensar sobre tipos e, portanto, torna seu projeto mais confiável. Neste artigo, vamos analisar por que o TS7006 ocorre, como corrigi-lo e como evitar tais situações no futuro. Vamos lá!



O que é TS7006 e por que ele aparece?



TS7006 é um erro do compilador TypeScript que ocorre quando você usa um parâmetro de função sem especificar explicitamente seu tipo, e a opção noImplicitAny está ativada no seu projeto. Parece complicado? Na verdade, é simples.



Imagine que o TypeScript é um professor rigoroso que exige: "Diga-me de que tipo é este parâmetro!". Se você ficar em silêncio (não especificar o tipo) e a opção noImplicitAny estiver ativada, o professor te dá uma nota baixa — ou seja, um erro.



Veja como é um exemplo clássico:



function greet(name) {  return `Olá, ${name}!`;}// Erro: TS7006: Parameter 'name' implicitly has an 'any' type


O TypeScript não sabe o que é name — string, número ou objeto. Por padrão, ele poderia atribuir o tipo any (que significa "tanto faz"), mas se a verificação estrita estiver ativada, ele exige uma especificação explícita.



Por que isso é útil?



O tipo any é como um "buraco negro" para o TypeScript. Ele desativa a verificação de tipos para esse parâmetro, e você perde todas as vantagens do TypeScript: autocompletar, verificação de erros em tempo de compilação e autodocumentação do código. O erro TS7006 força você a ser honesto com o compilador.



5 maneiras de corrigir TS7006 (com exemplos de código)



Vamos examinar todas as formas possíveis de resolver o problema. Desde as mais corretas até as "gambiarras" (que também têm seu lugar).



1. Especifique explicitamente o tipo do parâmetro (maneira recomendada)



A maneira mais óbvia e correta é simplesmente adicionar uma anotação de tipo:



function greet(name: string): string {  return `Olá, ${name}!`;}

// Ou um exemplo mais complexo com objetointerface User { id: number; name: string; email: string;}

function processUser(user: User): void { console.log(`Processando usuário: ${user.name}`);}


Essa maneira torna o código autodocumentado. Outro desenvolvedor (ou você mesmo daqui a um mês) entenderá imediatamente quais dados a função espera.



2. Use valores padrão



O TypeScript é inteligente o suficiente para inferir o tipo do parâmetro a partir do valor padrão:



function multiply(a: number, b = 10): number {  return a * b;}

// O TypeScript entenderá sozinho que b é do tipo numbermultiply(5); // 50multiply(5, 20); // 100


Isso funciona, mas tenha cuidado: se você esquecer de passar um argumento, o TypeScript não emitirá um erro, apenas usará o valor padrão. Às vezes é o que você precisa, às vezes não.



3. Use parâmetros rest com tipo



Se sua função aceita um número indefinido de argumentos do mesmo tipo:



function sum(...numbers: number[]): number {  return numbers.reduce((acc, curr) => acc + curr, 0);}

console.log(sum(1, 2, 3, 4, 5)); // 15


Observe: ...numbers: number[] — um array de números. Sem a especificação do tipo, o TS7006 também apareceria aqui.



4. Use genéricos (generics) para flexibilidade



Quando o tipo do parâmetro pode ser diferente

Blogs

Book Recommendations