Qué cubren tipos y qué cubren tests
El compilador no valida reglas de negocio; los tests sí. Los tests no detectan todas las incompatibilidades de contrato; TypeScript sí.
Usa tipos para asegurar forma de datos y consistencia entre módulos en tiempo de desarrollo.
Usa tests para validar lógica de negocio, side effects y escenarios temporales que el sistema de tipos no modela por completo.
Evita solapamiento innecesario: si una invariantes la garantiza el tipo, enfoca los tests en comportamiento.