Artículo de demostración: los ejemplos son genéricos y están pensados para mostrar cómo integrar imágenes y código en el blog. Puedes sustituirlos por tus propios casos.

TypeScript ayuda a detectar errores, pero sus tipos desaparecen en tiempo de ejecución. Por eso no basta con declarar que una respuesta de una API tiene forma de User: hay que comprobar que los datos recibidos realmente cumplen ese contrato.

Estos tres hábitos hacen que esa frontera sea más explícita.

1. Validar los datos en los bordes

Los datos externos deben tratarse como unknown, no como si fueran fiables. Una función de validación puede comprobar su estructura antes de permitir que el resto de la aplicación los utilice.

Ejemplo de una función guard que valida una entrada unknown

type User = {
  id: string;
  name: string;
};

function isUser(value: unknown): value is User {
  if (typeof value !== 'object' || value === null) return false;

  const record = value as Record<string, unknown>;
  return typeof record.id === 'string'
    && typeof record.name === 'string';
}

const payload: unknown = await response.json();

if (!isUser(payload)) {
  throw new Error('La respuesta no contiene un usuario válido');
}

console.log(payload.name); // TypeScript ya conoce el tipo User

La función no convierte mágicamente un dato incorrecto en uno correcto: comprueba las propiedades que necesita el código y devuelve false si no se cumplen.

2. Separar la entrada del modelo de dominio

Una respuesta externa puede contener campos opcionales, nombres distintos o valores inesperados. Es preferible validar y transformar esa respuesta en un punto concreto, en lugar de repartir comprobaciones por toda la aplicación.

Flujo de validación desde una API hasta el modelo de dominio

Esto también facilita las pruebas: se pueden probar por separado los datos válidos, los campos ausentes y los tipos incorrectos.

3. Nombrar los tipos según su intención

Un tipo llamado Data dice muy poco. En cambio, UserProfile, ArticleSummary o ApiError explican qué representa el dato y dónde encaja.

Los nombres claros reducen la necesidad de comentarios y hacen que las funciones públicas sean más fáciles de entender. También ayudan a distinguir entre una respuesta de API y el modelo que utiliza la interfaz.

Una regla práctica

Usa tipos para describir los datos que esperas y validaciones para comprobar los datos que realmente recibes. Son dos responsabilidades distintas y se complementan.

← Volver al blog