TGViewer
Организованное программирование | Кирилл Мокевнин Организованное программирование | Кирилл Мокевнин @orgprog · 14.2K subscribers
Post #465 10.1K
Точные типы DTO для ИИ

Есть такая проблема с DTO, что если делать их достаточно универсальными, то почти все поля внутри получаются nullable. Потому что любая сущность в режиме "создаем новую" практически всегда пустая, за исключением может каких-то флагов и статусов с дефолтными значениями. А вот в режиме редактирования как минимум заполнены id, name и тому подобное.


type Course = {
id: number | null;
slug: string | null;
name: string | null;
state: CourseState | null;
updated_at: string | null;
created_at: string | null;
}



При таком подходе в коде приходится делать что-то типа course.name!, когда мы говорим компилятору мол не парься, мамой клянусь тут есть name. Некрасиво, но жить можно. Казалось бы, а что мешает делать разные DTO под разные операции с нормальными типами? Лень. Если это не автогенерация, то может быть просто гемморойно постоянно все это поддерживать и добавлять. По крайней мере так можно было говорить раньше, но сейчас ситуация поменялась.

И дело даже не в том, что ИИ может сама нагенерить все что надо, а в том, что типы для ИИ это главный источник понимания вашего кода. Вы даже словами не всегда можете переубедить ИИ если она видит другие типы. Так вот, если все поля nullable, то ИИ по дефолту начнет втыкать проверки и фильтрацию на каждом шагу. Мне тут понадобилось сделать сортировку через drag and drop и для этого я завязал хук в плане к ии на id, который есть гарантированно во всех сохраненных сущностях. Что бы вы думали? Эта фигня видя такие типы, начала фильтровать данные по наличию id в объектах. Причем когда я дал команду так не делать, она просто перенесла логику в другое место, потому что тип явно говорит о том что id может не быть.

В общем закончилось тем, что я сделал файлик, куда автоматом нагенерил типов на базе моделей в беке (с валидациями):


type Course = {
id: number;
slug: string;
}


Ну а тем у кого design-first чуть проще, там генерятся любые DTO из спеки. Если используются правильные инструменты.

p.s. Вы сталкивались с этим?

Telegram | YouTube | Сообщество
Telegram Хекслет Программы обучения - https://ru.hexlet.io/courses Сообщество @hexletcommunity AI Клуб @hexletclub Поддержка @hexlet_help_bot
  • 👍 40
  • ❤ 6
  • 🔥 3
  • 🤔 2
  • 😢 1
  • 👨‍💻 1
  • 👾 1
More from @orgprog
  1. Sep 27, 2026Выпуск опубликован, можно смотреть и слушать. Сегодня в подкасте создатель Вастрик Клуба В…
  2. Sep 26, 2026Костные наушники Под каждым видео коммент, что за наушники ты носишь? Это костные наушники…
  3. Sep 24, 2026Статистика участия в опенсорсе Активно разрабатывая я регулярно наыткаюсь на баги и не дор…
  4. Sep 21, 2026Банда четырех для эпохи агентов Количество паттернов по тому, как эффективно работать с ИИ…
  5. Sep 16, 2026Главное правило принятия архитектурных решений Когда-то давно в одной из книжек я прочитал…
  6. Sep 13, 2026Сегодня у меня в гостях Александр Поломодов, который до недавнего времени был одним из про…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →