Как Zod лечит РОДОВУЮ травму Typescript

Поделиться
HTML-код
  • Опубликовано: 2 мар 2024
  • Сcылка на курс:
    micro-courses.ru/course/zod-f...
    Подписывайтесь на мой telegram канал:
    t.me/cleanfrontend
  • НаукаНаука

Комментарии • 46

  • @kabulzhan
    @kabulzhan 3 месяца назад

    Респект тебе, спасибо

  • @BOCbMOU
    @BOCbMOU 3 месяца назад +12

    Проблема с зодом в том, что его использование приводит к тому, что у нас появляется 2 источника правды: тайпскрипт и сам зод. Почему? Потому что схему зода можно преобразовать в тип тса, но тип тса нельзя преобразовать в зод (да, есть инструменты, типа ts-to-zod, но они лишь преобразовывают тип в схему, но нет лайвтайм проверки при изменении типа). В итоге нам либо получать все внешние типы из зода, что "очень удобно", либо иметь отдельно схему и отдельно тип. Можно, конечно, сравнивать полученный из зода тип с типом из тса, но это костыль. А ещё зод один из самых медленных валидаторов.
    В итоге лично я перешёл с zod на ajv и теперь генерирую схему на основе типа, а не наоборот. И любое изменение типа сразу же генерирует тс ошибку. И вот это уже действительно 1 источник правды - типы.
    В идеале вообще использовать runtipes или аналоги, парсящие сами тс типы, они на 1-2 порядка быстрее обычных валидаров, но там есть нюансы с компилятором.

    • @paromovevg
      @paromovevg  3 месяца назад

      Генерировать zod на основе типов или генерировать json схемы на основе типов, одно и тоже.
      Любая генерация это мутотень, как по мне. Dx у такого решения хуже. Zod единственное решение, в котором можно обойтись совсем без генерации
      Zod - самое простое и универсальное решение, из возможных. Но да, что бы работал один источник правды - нужно все типы описывать схемами. Схемы похуже читаются
      Да zod медленнее, но у него и специфика другая, он больше сделан под front-end и у него много всего заточено под валидации форм.
      Zod идеален для тех, кто только начинает свой путь безопасного ts, так как это самый универсальный инструмент. А дальше можно под специфику подобрать более профильный инструмент
      + у zod есть трансформации, что действительно позволяет делать приятные штуки, по типу превращения всяких строковых дат в Date и парсинга вложенных строковых представлений

    • @BOCbMOU
      @BOCbMOU 3 месяца назад +1

      ​@@paromovevg > "Генерировать zod на основе типов или генерировать json схемы на основе типов, одно и тоже."
      Именно поэтому генерация схемы из типа не очень полезна, т.к. после генерации у тебя нет никакой связи между типом и схемой. А того же ajv сначала прописывается тип, а только потом строится схема на основе тс ошибок, которые у тебя будут в схеме, пока она не удовлетворит сам тип. То есть генерации схемы как таковой вообще нет. А если мы говорим о каких-нибудь runtipes, то тут вообще никакой реальной схемы нет, только тип в тсе.
      > "Zod - самое простое и универсальное решение, из возможных."
      Спорное заявление.
      > "что бы работал один источник правды - нужно все типы описывать схемами. Схемы похуже читаются"
      Это во-первых, а во вторых все типы через зод не опишешь. Вернее можно, но не будешь же ты те же пропсы компонентов через него описывать? А прочие внутренние типы? В итоге у нас всё равно 2 источника правды.
      > "Да zod медленнее, но у него и специфика другая, он больше сделан под front-end"
      Как это выражается? Чем он превосходит тот же ajv или runtipes?
      > "у него много всего заточено под валидации форм."
      Очень полезно. Кто и зачем будет валидировать формы зодом? Кто вообще сегодня будет работать с формами без библиотеки для форм? А если это одна маленькая форма на весь сайт, то тут даже жс не нужен, хтмла хватит.
      > "Zod идеален для тех, кто только начинает свой путь безопасного ts, так как это самый универсальный инструмент."
      Опять же, спорное заявление. Чем он именно лучше аналогов? Чем он универсальнее?
      > "+ у zod есть трансформации"
      У аналогов они тоже есть.
      Такое мнение имеет право на жизнь, но заявления слишком категоричны. Тем более заявление про 1 источник правды в принципе ложно.
      Если бы видео было про то, что валидация в тсе нужна, пользуйтесь валидаторами, но лично я предпочитаю зод и вот почему..., то это одно, но посыл больше похож на рекламу собственного курса, чем на относительно объективное мнение, имхо.

    • @CJIu3eHb
      @CJIu3eHb 3 месяца назад

      @@BOCbMOU Вообще-то это и есть реклама курса. Насчет того, что у zod нет одного источника правды я не ухватил мысль. Может что-то не так понял. На мой взгляд, источник правды один - это схема. Другое дело, что читается она действительно сложнее, чем типы в чистом виде.

    • @paromovevg
      @paromovevg  3 месяца назад

      Это не просто рекламный видос, это первый урок курса. но если бы вы досмотрели до конца вы бы и runtypes там увидели и json schema и другие альтернативы
      > а только потом строится схема на основе тс ошибок, которые у тебя будут в схеме, пока она не удовлетворит сам тип
      В zod тоже так же можно, сделать тип, и потом строить схему пока не удовлетворит от ts. Но никто так не делат, потому что это описание одной структуры данных 2 раза
      Но с другой стороны можно не делать эту двойную работу, а сначала написать схему, а потом просто вывести на её основе тип.
      > "Zod - самое простое и универсальное решение, из возможных."
      Среди ts-first, самый популярный по скачиваниям. Поддерживает вообще любые структуры данных и сценации использования. ajv популярней в принципе, но он ограничен просто схемой, и не поддерживает работу с формами и преобразования
      > Очень полезно. Кто и зачем будет валидировать формы зодом?
      Видимо у нас разный опыт, да форму из 2х полей зодом валидировать нет смысла, но бывают вещи и посложнее, и тут я видел много убогих самописов, которые изи zod ом заменяются
      Тогда интеграция с react-hook-form очень хорошо работать начинает
      > "Да zod медленнее, но у него и специфика другая, он больше сделан под front-end"
      ajv - многословный, или извольте генерировать на основе типов
      rutupes вообще уже почти год не пооддеривается особо и 200к скачиваний против 7кк у zod
      zod - поддерживает как и валидацию форм, так и работу со схемами + трансформации и много интеграций
      Как уже говорил выше, решение не идеальное, и под специфику лучше есть (например ajv для валидации api запросов)
      Но zod можно использовать для любого кейса unknown -> строгий тип. И под этим я понимаю универсальность

    • @BOCbMOU
      @BOCbMOU 3 месяца назад

      @@CJIu3eHb речь про источники правды для всего приложения. И тут у нас за типизацию отвечают как тс типы, так и зод схемы.

  • @glebexpo5302
    @glebexpo5302 3 месяца назад

    годно жеж!

  • @vladislavbulanov625
    @vladislavbulanov625 3 месяца назад +1

    ролик еще не досмотрел просто ставлю лайк за то как красиво обосрал астрологов)

  • @nikola_antip
    @nikola_antip 3 месяца назад +2

    что насчёт valibot?

  • @Mytest437
    @Mytest437 3 месяца назад

    "Авось" это великий бог 😄

  • @ya.siddik
    @ya.siddik 3 месяца назад +2

    вижу отсылку в названии видео😂

    • @wardxela
      @wardxela 3 месяца назад

      $mol is everywhere

  • @thesweetlife843
    @thesweetlife843 3 месяца назад +6

    когда чертову cms продолжим прогать ?

    • @alexplay9972
      @alexplay9972 3 месяца назад +1

      Поддерживаю

    • @paromovevg
      @paromovevg  3 месяца назад +3

      Скоро все будет

  • @Indigo00757
    @Indigo00757 3 месяца назад +3

    Слишком много воды... По сути, важного, от силы 20%....

  • @GAccountMe
    @GAccountMe 2 месяца назад

    А по стартапу с нуля будет продолжение? Уже давно не было выпусков😂.

    • @paromovevg
      @paromovevg  2 месяца назад

      Продолжение на моей платформе micro-courses.ru/course/micro-courses-dev
      На ютуб этот формат смотрят так себе

    • @GAccountMe
      @GAccountMe 2 месяца назад

      @@paromovevg уже вчера нашел, спасибо….оказалось уже два новых видео есть, уже и их посмотрел и опять жду продолжения!👍

  • @awenn2015
    @awenn2015 3 месяца назад

    3:09 те кто по опытнее на такие "не типизированные данные" кидают валидации от Joi и все, нет никаких проблем
    20:42 тут ты правильно подметил, стоит попробовать использовать зод на фронте, надеюсь там есть не только проверка типов но и допом можно накатить валидации как в joi

  • @abbze8272
    @abbze8272 3 месяца назад +9

    Сколько же костылей навалили на js, не успеваешь изучать :)
    Чем больше разрабатываешь на нем - тем больше хочется уйти в какой-нибудь с++ или java.

    • @RamaRama-qv3jo
      @RamaRama-qv3jo 3 месяца назад

      Очень не хватало такого контента!

    • @alexdr1279
      @alexdr1279 3 месяца назад +1

      Я так и сделал. Это дошло уже до шизофрении. В js инструмент на инструменте инструментом погоняет. Потому что ни один не делает работу хорошо. В ts не лучше, хотя и он инструмент над js.

    • @user-yp3rz4ij2v
      @user-yp3rz4ij2v 3 месяца назад

      Современный фронт на джаве или плюсах не напишешь
      Про сервер я молчу, там подобные языки топ

    • @alexdr1279
      @alexdr1279 3 месяца назад

      @@user-yp3rz4ij2v ну я имел ввиду вообще с фронта ушел. Как часто говорят в фильмах... Слишком стар я стал для этого дерьма).

    • @uszakow
      @uszakow 3 месяца назад

      Ну да ну да. Пример из самого видео - бэкэнд выслал не пойми какие данные, пользователь в качестве эксперимента поменял что-то в localStorage. Но виноват, конечно же, фронтэнд и js 😆

  • @Phoenix_coding
    @Phoenix_coding 3 месяца назад

    ZOD

  • @dmitriy4415
    @dmitriy4415 3 месяца назад +1

    Есть valibot который очень лёгкий

    • @dkuba
      @dkuba 3 месяца назад

      Ну посмотри тогда размер пакета в npm Zod меньше весит чем Valibot. или я не прав?

  • @MsSofull
    @MsSofull 3 месяца назад +2

    typescript делает простые вещи сложными, а сложные any... В итоге все равно в обычный js собирается, так может typescript - лишнее ? 😀

    • @paromovevg
      @paromovevg  3 месяца назад +2

      Не представляю как без ts делать проекты на 100к строк кода и больше

    • @StarkElessar
      @StarkElessar 3 месяца назад

      согласен, но рил чем больше проект разростается - тем сложнее держать всё в голове :_( это слёзы, но как же заколебал typescript..... почему тяжело сделать нечто шедевральное и крутое как c#.....?????

    • @sergey53689
      @sergey53689 3 месяца назад

      @@paromovevg ты просто не умеешь

  • @sergey53689
    @sergey53689 3 месяца назад

    херня какая-то такая же как и typescript