Как стать автором
Обновить

Комментарии 14

Что мы находили? Мы уже начали понемногу это использовать. Находили, что сервер отдает нам пустой объект вместо пустого массива. Я просто посмотрел по коду — написан возврат пустого объекта. Дальше — отсутствие некоторых полей. Мы считали их обязательными, а они оказываются не обязательными. Поле, допускающее null, в каких-то случаях просто отсутствовало. То есть необязательное поле можно представить в двух вариантах: либо когда мы просто не передаем его, либо когда передаем null. Оно тоже не всегда корректно к нам приходило. Чтобы не ловить ошибки посередине нашего кода, мы можем это отлавливать как раз при запросах.

Это вам надо в GraphQL. Там нет таких проблем.

Вариантов на самом деле много. Этот был самый быстрый и в целом закрывал боли. Так же io-ts и подобные библиотеки можно использовать не только для взаимодействия с сервером, что закроет ещё несколько сценариев.

Но соглашусь, что вариант с io-ts для api не идеален, но гораздо лучше, чем принудительная типизация из any без проверок после fetch.
А не проще иметь документацию какие поля обязательные в ответе бэка а какие нет и о формате вместо того чтобы еще больше усложнять с ТС?

Если у вас есть полный контроль над backend-ом — можно какой угодно расклад реализовать. А вот если нет… То придётся импровизировать.

Я конечно могу ошибаться, т.к. не знаю вашей специфики, но мне кажется вам пора лечить XSS.


ваш скриншот

image


ибо <a href="${link}">${text}</a>, мягко говоря, не очень безопасен. И да, учтите, что одним только экранированием вы не спасётесь, ибо есть ещё javascript: ссылки.


Касательно io-ts, а вы случаем не рассматривали superstruct-ts-transformer? На текущем проекте мы ещё не внедрили ни того, ни другого и пока думаем. Очень уж не хочется писать io-ts типы руками, хочется писать TS, а не io-TS :) Но, кажется, onlyTranspile с подходом superstruct-ts-transformer несовместим… Начинаю думать в сторону кодогенерации.

Это достаточно абстрактный пример. React немного избаловал, поэтому даже не резало глаз.

В принципе ничего страшного в описании типов на io-ts руками нет, так логика почти не отличается от обычных TS типов кроме пары моментов: опциональные поля в объекте и рекурсивные типы. Я посмотрел на superstruct-ts-transformer и не очень хочется его тянуть и добавлять магию :)

Насчет кодогенерации соглашусь, я тоже думаю в её сторону время от времени, но для этого нужно будет много времени потратить: изучить, настроить и переписать типы (если речь идёт про openapi). Хотя и в чистом виде io-ts всё равно нужно будет в нескольких местах использовать, которые не связанны с сервером. Пока цель была сделать работу комфортнее минимальными усилиями, что по ощущениям мне удалось.
uperstruct-ts-transformer прикольная штука, спасибо за наводку, жалко в tsx не работает, я бы заюзал

Доклады никто не вычитывает или это запись на слух?
"Статистическая" типизация – перебор всё-таки...

Поправили, спасибо.

выкидываем TypeScript и берём Dart, готово, не благодарите

Можно было просто слайды выложить подряд, зачем между ними ещё текст? Ну а если серьёзно: код это текст, да и текст это… гм, текст. Зачем вы весь код и местами даже текст скриншотами накидали? Удачи прочитать это на мобильных, удачи скопировать, удачи понять.


Спасибо за описание io-ts, будем пробовать, жалко конечно что она немного сложновата для простой валидации.

$mol_data попробуйте, там всё просто.

НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий