Configuración de aplicaciones TypeScript: bibliotecas y herramientas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Configuración de aplicaciones TypeScript: revisión de herramientas y bibliotecas

Una aplicación TypeScript moderna rara vez funciona de forma aislada. Necesita saber a qué base de datos conectarse, qué puerto usar, dónde se encuentran las API de terceros y cómo comportarse en diferentes entornos (development, staging, production). Una configuración adecuada no es solo almacenar ajustes, sino una disciplina completa que incluye validación, tipificación y seguridad.

En este artículo, analizaremos las herramientas y bibliotecas clave para la gestión de configuraciones en proyectos TypeScript, desde soluciones simples hasta estándares industriales.



¿Por qué se necesita una configuración separada?

Existen varios enfoques para almacenar ajustes, y cada uno tiene desventajas:

  • Hardcode en el código fuente — viola el principio de 12-factor app, la configuración se mezcla con el código, imposible cambiar el comportamiento sin recompilar.
  • Variables de entorno (process.env) — método estándar, pero todos los valores son cadenas, no hay validación, es fácil cometer un error tipográfico.
  • Archivos JSON/YAML — son convenientes, pero deben versionarse con cuidado para no exponer secretos en el repositorio.

TypeScript agrega una capa adicional: queremos que la configuración esté estrictamente tipificada y que los errores se detecten en tiempo de compilación, no en tiempo de ejecución.



Bibliotecas para trabajar con variables de entorno



dotenv

La biblioteca más popular para cargar variables desde archivos .env. En proyectos TypeScript se usa casi siempre.

// npm install dotenv @types/dotenvimport dotenv from 'dotenv';

dotenv.config(); // carga .env en process.env

console.log(process.env.PORT); // '3000' — cadena

Características:

  • Funciona con cualquier framework (Express, NestJS, Next.js).
  • Soporta múltiples archivos (.env.local, .env.production).
  • No realiza validación — solo carga.


env-var

Una capa sobre process.env que agrega validación y conversión de tipos directamente en tiempo de ejecución.

// npm install env-varimport env from 'env-var';

export const config = { PORT: env.get('PORT').required().asPortNumber(), DB_HOST: env.get('DB_HOST').required().asString(), DEBUG: env.get('DEBUG').default('false').asBool(), API_KEYS: env.get('API_KEYS').asArray()};

Ventajas: API simple, convertidores integrados (número, puerto, booleano, array).
Desventajas: no hay integración con TypeScript a nivel de tipos — el resultado sigue siendo string | number | boolean.



Soluciones industriales: convict y node-config



Convict

Biblioteca para describir un esquema de configuración con validación, valores predeterminados y soporte para múltiples fuentes (archivos, env, argumentos de línea de comandos).

// npm install convict @types/convictimport convict from 'convict';

const config = convict({ env: { format: ['production', 'development', 'test'], default: 'development', env: 'NODE_ENV' }, server: { port: { format: 'port', default: 3000, env: 'PORT' } }, db: { host: { format: String, default: 'localhost', env: 'DB_HOST' } }});

config.validate({ allowed: 'strict' }); // lanzará un error si los datos no son válidos

export default config;

Características de convict:

  • Formatos integrados: port, email, url, int, nat (número natural).
  • Lectura automática desde process.env y archivos JSON.
  • Soporte para esquemas anidados.
  • Desvent

Recommendations