Добавить в корзинуПозвонить
Найти в Дзене

Точные типы 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 под разные операции с нормальными типами? Лень. Если это не автогенерация, то может быть просто гемморойно постоянно все это поддерживать и добавлять. По крайней мере так можно было говорить раньше, но сейчас ситуация поменялась. И дело даже не в том, что ИИ может сама нагенер

Точные типы 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 | Сообщество