Casi todos los desarrolladores de TypeScript han vivido esta historia: inicias un repositorio con strict: true y tipado riguroso. Meses después, por prisas de entrega o librerías externas sin tipos, el código comienza a llenarse de as any, @ts-ignore, operadores ! y llamadas a JSON.parse sin validar.
El proyecto compila sin errores, pero la seguridad en tiempo de ejecución se degrada. Este fenómeno se conoce como erosión de tipos.
Para solucionar esto construí Any-Hunter — una herramienta CLI, API programática y GitHub Action con cero dependencias que audita tu repositorio y calcula un Type-Health Score (0–100) en tiempo real.
🔍 ¿En qué se diferencia de un linter tradicional?
Mientras que herramientas como ESLint reportan listas de errores de sintaxis, Any-Hunter evalúa la salud de tipos como una métrica de calidad:
-
Métrica Cuantificable: Proporciona un puntaje claro (ej:
Score: 89/100) para establecer compuertas de calidad (quality gates) mínimas en CI/CD (--threshold=85). -
Auditoría Semántica con TypeChecker: Utiliza el motor del compilador de TypeScript para cazar el "Any Invisible" (variables que heredan
anyimplícitamente de APIs externas oJSON.parse). -
Severidad Ponderada: Un
anyen una variable local resta 2 puntos, pero un parámetro envenenado (fn(data: any)) o una fuga de retorno penalizan con 5 puntos debido a la contaminación del resto del scope. - Soporte Nativo SARIF y GitHub: Genera reportes visuales en los Step Summaries de GitHub Actions y archivos SARIF estándar para la pestaña Security > Code scanning.
⚡ Uso Rápido
Genera el archivo de configuración base:
npx any-hunter --init
Audita tu proyecto localmente:
npx any-hunter ./tsconfig.json --threshold=85
🧠 Cacería Profunda en el AST
Any-Hunter inspecciona directamente el Árbol de Sintaxis Abstracta (AST) de TypeScript para atrapar patrones críticos:
-
Parámetros envenenados:
function handleData(input: any) -
Fugas de retorno:
const fetchRecord = (): any => { ... } -
Genéricos camuflados:
Promise<any>,Array<any>,Record<string, any> -
Supresiones de compilador:
// @ts-ignoreo// @ts-nocheck
Si un caso específico requiere omitir la verificación de forma justificada:
// any-hunter-disable-next-line
const config = JSON.parse(rawFile) as any;
🤖 Integración en CI/CD (GitHub Actions)
Puedes ejecutar Any-Hunter automáticamente en cada Pull Request:
name: Control de Calidad de Tipos
on: [push, pull_request]
jobs:
audit-types:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: JacobPalomo/any-hunter@v1.1.2
with:
threshold: 85
exclude: '**/*.test.ts'
🤝 Proyecto Open Source
Any-Hunter es 100% código abierto bajo licencia MIT.
- ⭐️ Repositorio en GitHub: https://github.com/JacobPalomo/any-hunter
¡Cualquier comentario, caso de prueba o sugerencia para nuevas reglas es más que bienvenido!










