Effect для TypeScript разработчиков

от автора

Обо мне

Привет. Я разработчик и последние три года пишу на TypeScript, делаю свои Pet проекты, смотрю на технические тренды и пытаюсь делать полезные проекты и публиковать их в OpenSource.

Сразу к делу

Вот уже как год я пишу код и использую этот пакет Effect. Для меня Effect является швейцарским ножом который позволяет решать прикладные задачи без написания рутинного но очень важного кода, такого как:

  • работа с ошибками и восстановление из этого состояния (catch)

  • кеширование результатов дорогих вычислительных операций

  • параллельное выполнение процессов, остановка (interrupt)

  • работа с состоянием и безопасное изменение этого состояния

  • создание схем типов данных, чтение/запись по схеме, и т.п.

  • и многое другое

Effect состоит из большого количества небольших модулей и помогает писать код в декларативном стиле. Например в этом пакете можно найти следующие модули:

  • Array

  • HashMap

  • String

  • и десятки других…

Казалось бы зачем нужен Array ведь он есть в стандарте JS, но он нужен когда нужно создать такие типы как NonEmptyReadonlyArray, или другой неизменяемый Array который по сути Tuple

Effect позволяет мне, как TypeScript разработчику, держать фокус на главной части проекта и не распыляться на чисто технические задачи никак не связанные с целью проекта.

При чем тут эффекты?

Effect это не только швейцарский нож в котором есть все, остается просто найди нужную функцию 🤪.

Effect это еще идея про то как можно и нужно писать программы, которые легко писать, читать, поддерживать.

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

Эффект это значение, как например можно создать const foo = "bar" где foo будет содержать значение «bar«.

Например:

const getTodo = (   id: number ): Effect.Effect<unknown, HttpClientError> =>   httpClient.get(`/todos/${id}`).pipe(     Effect.andThen((response) => response.json)   )

Тут описывается функция, которая создает эффект. Важно понимать, что когда функция getTodo возвратила эффект то она не выполнит http запрос, она лишь вернет эффект, который умеет посылать http запрос и он может завершиться значением с типом unknown или завершиться с ошибкой типа HttpClientError.

Так как эффект это значение то это открывает дополнительные возможности и можно легко создать другой эффект на базе этого который будет:

  • восстанавливаться если была ошибка типа HttpClientError

  • попытаться повторно выполнить эффект несколько раз в случае определенной ошибки

  • кешировать результат

  • множество других сценариев…

Про то, что такое эффект можно на примерах найти тут.

Effect сообщество пишет отличную документацию по многим пунктам.

Пока на этом все

Сорри что статья короткая.

Я не нашел на хабре статьи которая рассказывала про эту мощную библиотеку. Цель этой статьи в том чтобы заинтересовать TypeScript разработчиков и попробовать использовать ее в своих задачах.

Я могу подробнее написать в следующий раз статью про свой опыт работы с Effect в более подробной форме. У меня нет цели написать туториал или что то подобное, потому что Effect сообщество очень круто справляется с этой задачей

Ссылки

главный сайт

youtube

как работать с ожидаемыми/не ожидаемыми ошибками

мои библиотеки которые используют Effect: https://github.com/orgs/effect-ak/repositories

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Продолжить про свой опыт работы с Effect и TypeScript более подробно?

48.15% да13
51.85% нет14

Проголосовали 27 пользователей. Воздержались 6 пользователей.

ссылка на оригинал статьи https://habr.com/ru/articles/877426/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *