5. Modelos: contratos para entender los datos¶
Qué son, para qué sirven y cómo conectan frontend y API.
Modelo TypeScript¶
export interface Student {
id: number;
name: string;
email: string;
active: boolean;
}
| Elemento | Qué hace |
|---|---|
| Interface | Describe la forma esperada de un objeto |
| Propiedades | Nombran los datos disponibles |
| Tipos | Indican qué valor acepta cada propiedad |
| No genera HTML | Su función es representar información |
¿Para qué sirve un modelo?¶
- Hace explícito el contrato de datos que usa la aplicación.
- Permite autocompletado y detecta errores antes de ejecutar.
- Evita objetos ambiguos y propiedades escritas de forma diferente.
- Sirve como vocabulario común entre componente, servicio y API.
const s: Student = { id: 1, name: 'Ana', email: 'ana@javeriana.edu.co' };
// ^^^^^^^ Error al compilar: falta la propiedad 'active'
console.log(s.mail);
// ^^^^ Error al compilar: 'mail' no existe en Student. ¿Quisiste decir 'email'?
En JavaScript ambos errores aparecerían como undefined en la pantalla del usuario; con el modelo, el editor los marca en rojo mientras escribimos.
Conectar frontend y API¶
El modelo es el espejo del DTO que expone el backend (ver DTO). Los nombres de las propiedades deben coincidir exactamente con el JSON:
Modelos derivados¶
Al crear un estudiante todavía no existe el id: el backend lo generará. En lugar de duplicar la interfaz, se deriva:
export type NewStudent = Omit<Student, 'id'>;
// equivale a { name: string; email: string; active: boolean; }
Este tipo lo usaremos en el servicio y en el formulario.
¿interface o class?
Para describir datos que llegan como JSON se usa interface: no genera código JavaScript y no necesita new. Una class se reserva para objetos con comportamiento (métodos) propio.
Idea clave
El modelo no guarda datos por sí solo; describe cómo deben verse los datos que circulan por la aplicación.
Siguiente: Servicios.