immutable-typescript
Immutable-typescript
is a library that provides immutable objects in TypeScript.
An instance of standard TypeScript POJO-like class, such as
can be converted to immutable using immutable-typescript
in the following way:
;;; = new Author"Jules Verne", ; // convert to immutable = ImmutableUtils.asImmutablemutableInstance; // now, we can access any of the properties of immutable:console.logimmutable.name;console.logimmutable.books.publicationYear; // but modifying any of them will fail to compileimmutable.name = "Foo"; // compilation errorimmutable.books = new Book...; // compilation errorimmutable.books.publicationYear = 2018; // compilation errorimmutable.books.pushnew Book...; // compilation error
Immutable-typescript
provides operators to set properties of immutable objects. These operators create a copy of the original object,
with the updated value of the modified property:
// creates a new instance with an updated name property; // fails to compile, as name in type Author is not of type number:ImmutableUtils.updateimmutable.set"name", 42; // fails to compile, as nonexistentProperty does not exist in type Author:ImmutableUtils.updateimmutable.set"nonexistingProperty", "Boom!";
As you can see, the setter operators are type safe: they statically check both the property name and the type. It is also possible to update a nested value, e.g.:
= ImmutableUtils.updateimmutable .at"books" .at0 .set"publicationYear", 2018;
Also in this case, all the property names are statically validated.
Immutable-typescript
exposes also parameterless functions from the underlying object in the Immutable
:
;; ;
Note - the library does not validate if the function is pure, so use this feature with extreme caution.