TypeScript Academy · Lección

Secretos y seguridad de tipos

Gestione valores sensibles sin filtrarlos en los tipos.

Lección 4 de 413 pasos

Secretos y seguridad de tipos es una lección gratuita de TypeScript Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de TypeScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de TypeScript Academy incluye 4 lecciones en total.

Los secretos requieren un cuidado especial

Las claves de API, las contraseñas y los tokens también son configuración, pero filtrarlos en registros o mensajes de error es peligroso. La seguridad de tipos puede ayudar a evitar que los valores secretos queden expuestos accidentalmente.

El problema de los registros accidentales

Un secreto que sea una cadena normal puede registrarse accidentalmente en cualquier lugar, por ejemplo mediante console.log(config) o un volcado de errores que serialice todo el objeto de configuración.

const config = { dbPassword: "hunter2" };
console.log(config); // leaks the password

Tipos con marca para secretos

Un tipo con marca identifica una cadena como secreto en tiempo de compilación, de modo que el sistema de tipos distingue un Secret de una cadena normal y obliga a manipularlo deliberadamente.

type Secret = string & { readonly __brand: "Secret" };
function secret(s: string): Secret { return s as Secret; }

Por qué ayuda la marca

Como un Secret no se puede asignar a un string normal sin una intención explícita, las funciones pueden exigir un Secret cuando corresponda y no podrá pasarlo accidentalmente a un lugar inseguro.

function connect(pw: Secret) { /* uses pw */ }
// connect("plain") -> type error; must wrap with secret()

Una clase envoltorio para secretos

Otra alternativa consiste en envolver el valor en una clase cuyo toString y cuya serialización estén redactados, de modo que incluso un registro descuidado muestre un marcador de posición.

class Secret {
  constructor(private readonly value: string) {}
  expose(): string { return this.value; }
  toString() { return "[REDACTED]"; }
}

Redactar durante la serialización

Personalizar toJSON garantiza que el secreto nunca aparezca cuando un objeto se serializa con JSON.stringify, que es la vía más habitual de filtración accidental.

class Secret {
  constructor(private readonly value: string) {}
  expose() { return this.value; }
  toJSON() { return "[REDACTED]"; }
}
// JSON.stringify({ pw: new Secret("x") }) -> {"pw":"[REDACTED]"}

Solo exponer de forma explícita

El valor real solo se puede obtener mediante un método explícito como expose(). Esto hace visible y auditable en el código cada lugar que lee un secreto.

const pw = new Secret("hunter2");
console.log(String(pw)); // [REDACTED]
connectToDb(pw.expose()); // deliberate access

Mantener los secretos fuera de los tipos generales

Evite colocar cadenas secretas sin procesar en interfaces de configuración generales que se registren completas. Use el tipo Secret para que queden redactadas de forma predeterminada siempre que se imprima la configuración.

interface Config {
  host: string;
  dbPassword: Secret; // not a plain string
}

Cargar secretos de forma segura

Envuelva los valores secretos del entorno al leerlos, de modo que estén marcados o encapsulados desde el primer momento y nunca circulen como cadenas normales.

const config = {
  host: process.env.DB_HOST!,
  dbPassword: new Secret(process.env.DB_PASSWORD!),
};

Defensa en profundidad

Los secretos protegidos a nivel de tipos reducen las filtraciones accidentales, pero no sustituyen las buenas prácticas operativas: restrinja quién puede leer el entorno, evite registrar los cuerpos de las solicitudes y elimine los secretos de los sistemas de notificación de errores.

Resumen de técnicas

Utilice tipos con marca para exigir un manejo deliberado, una clase envoltorio con toString/toJSON que redacten el valor y un expose() explícito para leerlo, manteniendo los secretos fuera de los registros y de la salida serializada.

Comprobación rápida

Comprobación rápida de esta lección.

Resumen

Proteja los secretos con tipos con marca (que exijan un manejo deliberado) o con una clase envoltorio cuyos métodos toString/toJSON devuelvan [REDACTED], y exponga el valor real únicamente mediante un expose() explícito. Así, los secretos quedan fuera de los registros y de la configuración serializada.

Gratis para empezar

Aprende TypeScript con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
101
Lecciones
352

Preguntas frecuentes

¿La lección «Secretos y seguridad de tipos» es gratis?

Sí — el texto completo de «Secretos y seguridad de tipos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de TypeScript Academy, actualiza a CoddyKit PRO. El curso de TypeScript Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Secretos y seguridad de tipos»?

Gestione valores sensibles sin filtrarlos en los tipos. Practicas TypeScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar TypeScript Academy?

No se requiere experiencia previa. TypeScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Secretos y seguridad de tipos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de TypeScript Academy?

Sí. Cada lección de TypeScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Tipado de variables de entorno
  2. Configuración validada mediante esquemas
  3. Capas de configuración y valores predeterminados
  4. Secretos y seguridad de tipos
← Volver a TypeScript Academy