# Понедельник 8 твитов
Привет мир! Я Сергей Мелюков (@smelukov). Работаю архитектором в Яндекс Маркет. Люблю ООП, сборщики (особенно самоп… twitter.com/i/web/status/1…
8:36Хочется немного пообщаться ☺️ Как вы относитесь к хелперам модификации типов типа Pick/Omit/etc в TS/Flow
8:40Собственно, к чему это... Я противник нескольких вещей:
13:03Utility Types - набор функций. На вход поступает один тип, на выходе - другой
Используются для извлечения/модификац… twitter.com/i/web/status/1…
Как минимум ухудшается читаемость/поддерживаемость кода, особенно при большой вложенности
Часто применяются не пото… twitter.com/i/web/status/1…
В итоге, изменив входной тип, мы сломаем места, в которых используется выходной тип, их нужно будет рефакторить. Си… twitter.com/i/web/status/1…
13:04Если мы хотим именно расширить тип и выходной реально зависит от входного, то стоит задать себе вопрос: а правильно… twitter.com/i/web/status/1…
13:04Давайте попробуем устроить интерактив: присылайте свои примеры использования хелперов (пример кода и описание того,… twitter.com/i/web/status/1…
13:05# Четверг 5 твитов
Далее по списку идут type union/intersection
В TS/Flow есть вещи, которые, к сожалению, нельзя реализовать без них.… twitter.com/i/web/status/1…
Про наследования типов
В случае с ООП-кодом можно просто наследовать один класс от другого и готов, но в ином случа… twitter.com/i/web/status/1…
К слову, в C++ есть наследование структур (cpp.sh/6yixw) но этим все и ограничивается, а вот в TS/Flow м… twitter.com/i/web/status/1…
14:46Про nullable
С flow проще, там можно описать поле(foo: ?string) которое сможет легально принимать null
Да, туда мож… twitter.com/i/web/status/1…
А вот в TS нужно явно указать, что в поле можно записать null ({foo: string | null})
14:46