Entendendo @ts-ignore e Quando Você Deve Usá-lo
O sistema de tipos do TypeScript detecta erros antes que eles cheguem à produção, mas às vezes você precisa dizer ao compilador para ignorar algo. É aí que entra o @ts-ignore—uma diretiva do TypeScript que suprime erros do compilador para a próxima linha de código. Embora possa ser uma salvação em situações específicas, usá-lo de forma descuidada compromete a própria segurança de tipos que o TypeScript oferece.
Este artigo explica o que o @ts-ignore faz, como ele difere da alternativa mais segura @ts-expect-error, e quando (se é que alguma vez) você deve recorrer a essas diretivas do TypeScript no seu código.
Pontos-Chave
- @ts-ignore suprime erros do TypeScript de forma silenciosa e permanente, tornando-o arriscado para manutenção de código a longo prazo
- @ts-expect-error é uma alternativa mais segura que falha a build quando o erro não existe mais
- Use essas diretivas com moderação—apenas para código legado, tipos de terceiros ausentes ou correções temporárias de migração
- Considere type assertions, type guards ou definições de tipo adequadas antes de suprimir erros
O Que @ts-ignore Faz no TypeScript
A diretiva @ts-ignore é um comentário que instrui o compilador do TypeScript a pular a verificação de tipos para a linha seguinte:
// @ts-ignore
const result: number = "this is actually a string"
Sem a diretiva, o TypeScript lançaria um erro de compilação porque você está atribuindo uma string a uma variável tipada como number. Com @ts-ignore, o erro desaparece—permanente e silenciosamente.
Este comportamento torna o @ts-ignore particularmente perigoso. Uma vez adicionado, ele não fornece feedback se o problema subjacente for corrigido. A diretiva permanece no seu código, potencialmente ocultando novos erros do compilador TypeScript que surgem de mudanças futuras.
@ts-ignore vs @ts-expect-error: Uma Diferença Crítica
O TypeScript 3.9 introduziu o @ts-expect-error, uma alternativa mais segura ao @ts-ignore. A diferença principal? O @ts-expect-error falha a build se não existir erro na próxima linha:
// Usando @ts-ignore (arriscado)
// @ts-ignore
const value: string = getUserName() // Silencioso mesmo após corrigir getUserName()
// Usando @ts-expect-error (mais seguro)
// @ts-expect-error
const value: string = getUserName() // Lança "Unused '@ts-expect-error' directive" quando corrigido
Este comportamento autodocumentado torna o @ts-expect-error superior para as melhores práticas do TypeScript. Ele força você a remover a diretiva assim que o problema subjacente for resolvido, mantendo a segurança de tipos em todo o seu código.
Quando @ts-ignore Pode Ser Aceitável
Apesar dos riscos, existem cenários raros onde o @ts-ignore serve a um propósito legítimo:
Trabalhando com Código Legado
Ao migrar JavaScript para TypeScript, você pode encontrar padrões legados complexos que são difíceis de tipar corretamente:
// @ts-ignore - Lógica de validação legada, refatoração planejada para Q2
return legacyValidator.validateWithCustomRules(data, rules)
Bibliotecas de Terceiros Sem Tipos
Alguns pacotes npm carecem de definições TypeScript, e criar tipos abrangentes nem sempre é viável:
// @ts-ignore - Nenhum pacote @types disponível para ancient-library@1.0.0
import { processData } from 'ancient-library'
Correções Temporárias de Migração
Durante refatorações em larga escala, você pode precisar entregar código funcional antes de completar as atualizações de tipo:
// @ts-ignore - Temporário: Remover após completar migração do tipo User (JIRA-1234)
const user = getOldUserFormat()
Discover how at OpenReplay.com.
Os Custos Ocultos de Usar @ts-ignore em Excesso
Cada @ts-ignore no seu código é dívida técnica. Veja o que você arrisca:
// ❌ Ruim: Ocultando um bug real
// @ts-ignore
const total = calculatePrice(items, "invalid-discount-type")
// ✅ Melhor: Corrija o problema real
const total = calculatePrice(items, DiscountType.PERCENTAGE)
Suprimir erros do compilador TypeScript significa:
- Bugs em tempo de execução que o TypeScript teria detectado
- Refatoração mais difícil à medida que os tipos se tornam não confiáveis
- Suporte reduzido de autocompletar e IntelliSense na IDE
- Confusão para membros da equipe que não podem confiar nos tipos
Aplicando Melhores Práticas com ESLint
O plugin TypeScript ESLint fornece regras para gerenciar o uso de diretivas:
{
"rules": {
"@typescript-eslint/prefer-ts-expect-error": "error",
"@typescript-eslint/ban-ts-comment": [
"error",
{
"ts-ignore": "allow-with-description",
"minimumDescriptionLength": 10
}
]
}
}
Esta configuração requer comentários explicativos e encoraja o uso de @ts-expect-error em vez de @ts-ignore, tornando as diretivas TypeScript mais intencionais e rastreáveis.
Melhores Alternativas a Considerar Primeiro
Antes de recorrer ao @ts-ignore, experimente estas abordagens:
// Opção 1: Type assertions (quando você sabe mais que o TypeScript)
const element = document.getElementById('my-id') as HTMLInputElement
// Opção 2: Type guards
if (typeof value === 'string') {
// TypeScript agora sabe que value é uma string
console.log(value.toUpperCase())
}
// Opção 3: Definições de tipo adequadas
declare module 'untyped-library' {
export function someFunction(input: string): number
}
Conclusão
A diretiva @ts-ignore é a saída de emergência do TypeScript—use-a apenas quando nenhuma outra opção existir. Em quase todos os casos, @ts-expect-error fornece uma alternativa mais segura que mantém a responsabilidade no seu código. Melhor ainda, invista tempo em tipagem adequada, type assertions ou type guards para preservar a segurança de tipos que torna o TypeScript valioso.
Lembre-se: cada erro suprimido é um bug potencial esperando para acontecer. Mantenha os erros do compilador TypeScript visíveis, seus tipos honestos e o uso de @ts-ignore em zero absoluto sempre que possível.
Perguntas Frequentes
Não, @ts-ignore afeta apenas a linha imediatamente seguinte. Para múltiplas linhas, você precisa de diretivas separadas para cada linha ou considere encapsular o código em uma função com tipagem adequada.
Não, @ts-ignore é puramente uma diretiva de tempo de compilação. Não tem impacto no desempenho em tempo de execução, pois os comentários TypeScript são removidos durante a compilação para JavaScript.
Use a funcionalidade de busca da sua IDE para encontrar todas as instâncias de @ts-ignore, ou execute um comando grep como grep -r '@ts-ignore' . no diretório do seu projeto para localizá-los para revisão.
Evite @ts-nocheck, pois ele desabilita a verificação de tipos para o arquivo inteiro. Se você precisa de múltiplas supressões, é melhor abordar a causa raiz ou usar comentários @ts-expect-error direcionados com explicações.
Complete picture for complete understanding
Capture every clue your frontend is leaving so you can instantly get to the root cause of any issue with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.
Check our GitHub repo and join the thousands of developers in our community.