eslint-plugin-functional is an ESLint plugin to disable mutation and promote functional programming in JavaScript.
This can be very useful in projects using React, Redux or similar libraries, which require or at least recommend using immutable data.
Enforcing immutability
For example, the immutable-data
rule forbids you to
mutate objects and arrays:
const obj = { foo: 'bar' };
// Modifying an existing object/array is not allowed!
obj.bar = 'baz';
Forcing you to create a new derived object:
const obj = { foo: 'bar' };
const obj2 = { ...obj, bar: 'baz' };
Preferring read-only types
If you’re using TypeScript, you can use the
prefer-readonly-type
rule to enforce declaring
interface/type properties as read-only. The following would be invalid with this
rule:
interface Point {
x: number;
y: number;
}
While this would be valid:
interface Point {
readonly x: number;
readonly y: number;
}