Вступить в клуб →
средняявопросREST API на NestJS и Express

TypeScript-тип на @Body() не проверяет тело запроса

Контроллер на NestJS:

interface CreateOrderDto {
  amount: number;
  currency: string;
}

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

Клиент прислал {"amount": "сто", "currency": 5, "isAdmin": true}. Проект собирается без ошибок, тесты зелёные, но в базе появляются заказы с суммой-строкой. Что здесь верно?

  • Типы TypeScript стираются при компиляции: в рантайме проверки нет, нужен класс DTO с валидацией
  • NestJS приводит тело к типу из аннотации, ошибка в том, что использован `interface` вместо `type`
  • Проблема в том, что не включён строгий режим компилятора: со строгими настройками такое тело будет отклонено на входе
  • Достаточно описать схему тела в Swagger-декораторах: сгенерированный по ним контракт валидирует входящие запросы сам

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела