Menu
CoddyTech

DTOs

Parte de la sección TypeScript y NestJS del Journey de Node.js de Coddy. Lección 10 de 17.

@Body() body: { title: string } describe el cuerpo en un solo lugar, y nada lo comprueba: { "title": 42 } pasa directamente. Un DTO, un objeto de transferencia de datos, es una clase que describe qué contiene el cuerpo de una solicitud.

export class CreateOrderDto {
    customer: string;
    express?: boolean;
}

@Post()
create(@Body() dto: CreateOrderDto) {
    return this.ordersService.create(dto);
}

express? marca un campo opcional. El controlador y el servicio comparten la clase, así que coinciden en la estructura.

Un DTO es una clase, no una interfaz, por una razón. Las interfaces se eliminan junto con los demás tipos cuando se ejecuta el código, mientras que una clase sigue existiendo, y solo los decoradores de class-validator en una clase pueden comprobar un cuerpo en tiempo de ejecución. Esa es la siguiente lección.

challenge icon

Desafío

Fácil
  • Completa CreateTaskDto en dto/create-task.dto.ts: un title y un done opcional.
  • Úsalo para el cuerpo de POST /tasks. Una tarea nueva toma done del cuerpo; usa false cuando esté ausente.
  • Envía POST /tasks con { "title": "Pay rent", "done": true } y después con { "title": 42 }.

Pruébalo tú mismo

// Describe el cuerpo de POST /tasks: un título y done cuando el cliente lo envía.
export class CreateTaskDto {}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de TypeScript y NestJS