doop
... is a way of writing immutable classes in TypeScript, with a fairly minimal syntax for declaring properties (you only have to state the property name and type once), and convenient/fast clone-with-update, all with static type checking and support for inheritance.
I'm going to pretend the name stands for:
Declarative Object-Oriented Persistence
-
Persistence in the sense of immutable data structures, nothing to do with I/O serialization.
-
Declarative in that decorators are used to drive metaprogramming that takes care of all the behind-the-scenes implementation stuff for you.
But really it's a Futurama reference.
Installation
npm install doop
The package includes TypeScript declarations so you don't need to install them separately.
How to declare a class with three properties:
;
And here's how you'd use it:
;expecta.legs.toEqual2; // jasmine spec-style assertion // create a modified clone;expectb.legs.toEqual4; // original object is unaffectedexpecta.legs.toEqual2;
That is, you call the property with no arguments to get the value, and you call it with one argument to create a new, separate instance of the class with that property's value modified but all other doop
properties having the same value as the original instance. Cloning is super-fast.
(Avoid defining any ordinary instance properties on the same class; they will not be copied and will have the value undefined
on a new cloned instance.)
More details
See the background info.