In this section, I want to reiterate a point on immutability. This topic is huge in JavaScript, and in some cases, TypeScript may be a much better solution than any other path to immutability.
TypeScript comes with the special readonly keyword that enforces that a certain variable is read-only. You cannot mutate such a variable. This is enforced at compile time. Hence, you have no runtime checks for immutability. If this is a huge win for you, then you may not even need any API, such as Immutable.js. Immutable.js shines when you are required to clone huge objects to avoid mutations. If you can get away with a spread operation on your own, then it means your object may not be big enough for Immutable.js.