Я искал симпатичный маленький модуль, который помог бы мне сделать мои DTO неизменными. Библиотеки, которые я обнаружил, были либо излишними (immutable.js), либо не поддерживали глубокое слияние объектов во время мутаций, либо они делали мой код уродливым, с большим количеством вызовов функций для каждого изменения. Так появилась идея заморозить-мутировать: Модуль npm на основе Javascript / Typescript, который помогает мне сохранять простоту и понятность.

  • Закрепите любой объект, и он станет глубоко неизменяемым: все его свойства и дочерние объекты замораживаются в процессе. Это делается путем рекурсивного вызова собственного Object.freeze Javascript.
  • Преобразуйте замороженный объект с помощью набора изменений, и вы получите новый закрепленный объект, который является слиянием или наложением набора изменений поверх исходного объекта. . Опять же, это глубокое слияние, которое также работает с массивами, наборами, картами и вашими собственными пользовательскими классами . Для смелых: вы можете предоставить собственные функции замораживания и слияния.
  • Используя Typescript, вы получаете все преимущества универсальных шаблонов, проверяя достоверность набора изменений, типов, возвращаемых только для чтения, и интерфейсов для пользовательских функций.

Хватит говорить. Давайте посмотрим на это в действии…

Замораживание и слияние объектов и массивов во время мутации:

Поддержка Set и Map и объектов класса (также возможно, вы захотите пропустить immutable.js)

Поддержка циклических объектов

Еще более интересные циклические объекты…

Для Typescript у нас есть еще кое-что!

Больше возможностей:

  1. Никаких зависимостей и всего 2 КБ pkg.
  2. Может быть загружен в браузере.
  3. Будьте осторожны с изменением больших объектов, массивов и карт - это тяжело!
  4. Код полностью покрыт шутливыми тестами.

Для более подробной информации обратитесь к readme on git.

Добро пожаловать в star / clap / like / share, чтобы показать мне, насколько вы классны, и помочь другим найти эту библиотеку. ;-)

Ваше здоровье!

Эрам в weblegions точка ком

— — -

редактировать:
Обновлено для 2021 Tyepscript; добавлен функционал типа погружать / производить.

Первоначально опубликовано на github.com.