Comments 14
Что мы находили? Мы уже начали понемногу это использовать. Находили, что сервер отдает нам пустой объект вместо пустого массива. Я просто посмотрел по коду — написан возврат пустого объекта. Дальше — отсутствие некоторых полей. Мы считали их обязательными, а они оказываются не обязательными. Поле, допускающее null, в каких-то случаях просто отсутствовало. То есть необязательное поле можно представить в двух вариантах: либо когда мы просто не передаем его, либо когда передаем null. Оно тоже не всегда корректно к нам приходило. Чтобы не ловить ошибки посередине нашего кода, мы можем это отлавливать как раз при запросах.
Это вам надо в GraphQL. Там нет таких проблем.
Но соглашусь, что вариант с io-ts для api не идеален, но гораздо лучше, чем принудительная типизация из any без проверок после fetch.
Я конечно могу ошибаться, т.к. не знаю вашей специфики, но мне кажется вам пора лечить XSS.
ибо <a href="${link}">${text}</a>
, мягко говоря, не очень безопасен. И да, учтите, что одним только экранированием вы не спасётесь, ибо есть ещё javascript:
ссылки.
Касательно io-ts, а вы случаем не рассматривали superstruct-ts-transformer? На текущем проекте мы ещё не внедрили ни того, ни другого и пока думаем. Очень уж не хочется писать io-ts типы руками, хочется писать TS, а не io-TS :) Но, кажется, onlyTranspile с подходом superstruct-ts-transformer
несовместим… Начинаю думать в сторону кодогенерации.
В принципе ничего страшного в описании типов на io-ts руками нет, так логика почти не отличается от обычных TS типов кроме пары моментов: опциональные поля в объекте и рекурсивные типы. Я посмотрел на superstruct-ts-transformer и не очень хочется его тянуть и добавлять магию :)
Насчет кодогенерации соглашусь, я тоже думаю в её сторону время от времени, но для этого нужно будет много времени потратить: изучить, настроить и переписать типы (если речь идёт про openapi). Хотя и в чистом виде io-ts всё равно нужно будет в нескольких местах использовать, которые не связанны с сервером. Пока цель была сделать работу комфортнее минимальными усилиями, что по ощущениям мне удалось.
Доклады никто не вычитывает или это запись на слух?
"Статистическая" типизация – перебор всё-таки...
Можно было просто слайды выложить подряд, зачем между ними ещё текст? Ну а если серьёзно: код это текст, да и текст это… гм, текст. Зачем вы весь код и местами даже текст скриншотами накидали? Удачи прочитать это на мобильных, удачи скопировать, удачи понять.
![](https://habrastorage.org/webt/s9/yu/vk/s9yuvkekt9-vc2ql0yvysprfa78.png)
Делаем TypeScript строже. Доклад Яндекса