
Product
Introducing Socket Firewall Enterprise: Flexible, Configurable Protection for Modern Package Ecosystems
Socket Firewall Enterprise is now available with flexible deployment, configurable policies, and expanded language support.
eslint-plugin-functional
Advanced tools
ESLint rules to promote functional programming in TypeScript.

An ESLint plugin to disable mutation and promote functional programming in JavaScript and TypeScript.
Any donations would be much appreciated. π
eslint-plugin-functional is available as part of the Tidelift Subscription.
Tidelift is working with the maintainers of eslint-plugin-functional and a growing network of open source maintainers
to ensure your open source software supply chain meets enterprise standards now and into the future.
Learn more.
See our getting started guide.
The following rulesets are made available by this plugin.
Presets:
Strict (configs.strict)
Enforce recommended rules designed to strictly enforce functional programming.
Recommended (configs.recommended)
Has the same goal as the strict preset but a little more lenient, allowing for functional-like coding styles and
nicer integration with non-functional 3rd-party libraries.
Lite (configs.lite)
Good if you're new to functional programming or are converting a large codebase.
Categorized:
Currying (configs.currying)
JavaScript functions support syntax that is not compatible with curried functions. To enforce currying, this syntax
should be prevented.
No Exceptions (configs.noExceptions)
Functional programming style does not use run-time exceptions. Instead expressions produces values to indicate errors.
No Mutations (configs.noMutations)
Prevent mutating any data as that's not functional
No Other Paradigms (configs.noOtherParadigms)
JavaScript is multi-paradigm, allowing not only functional, but object-oriented as well as other programming styles.
To promote a functional style, prevent the use of other paradigm styles.
No Statements (configs.noStatements)
In functional programming everything is an expression that produces a value.
JavaScript has a lot of syntax that is just statements that does not produce a value.
That syntax has to be prevented to promote a functional style.
Stylistic (configs.stylistic)
Enforce code styles that can be considered to be more functional.
Other:
All (configs.all)
Enables all rules defined in this plugin.
Off (configs.off)
Disable all rules defined in this plugin.
Disable Type Checked (configs.disableTypeChecked)
Disable all rules that require type information.
External Vanilla Recommended (configs.externalVanillaRecommended)
Configures recommended vanilla ESLint rules.
External TypeScript Recommended (configs.externalTypeScriptRecommended)
Configures recommended TypeScript ESLint rules.
Enabling this ruleset will also enable the vanilla one.
The below section gives details on which rules are enabled by each ruleset.
πΌ Configurations enabled in.
β οΈ Configurations set to warn in.
π« Configurations disabled in.
βοΈ Set in the lite configuration.
β
Set in the recommended configuration.
π Set in the strict configuration.
π¨ Set in the stylistic configuration.
π§ Automatically fixable by the --fix CLI option.
π‘ Manually fixable by editor suggestions.
π Requires type information.
β Deprecated.
| Name | Description | πΌ | β οΈ | π« | π§ | π‘ | π | β |
|---|---|---|---|---|---|---|---|---|
| functional-parameters | Enforce functional parameters. | βοΈ β
π | π |
| Name | Description | πΌ | β οΈ | π« | π§ | π‘ | π | β |
|---|---|---|---|---|---|---|---|---|
| no-promise-reject | Disallow rejecting promises. | |||||||
| no-throw-statements | Disallow throwing exceptions. | βοΈ β
π | π | |||||
| no-try-statements | Disallow try-catch[-finally] and try-finally patterns. | π | βοΈ β |
| NameΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β | Description | πΌ | β οΈ | π« | π§ | π‘ | π | β |
|---|---|---|---|---|---|---|---|---|
| immutable-data | Enforce treating data as immutable. | βοΈ β
π | π | |||||
| no-let | Disallow mutable variables. | βοΈ β
π | ||||||
| prefer-immutable-types | Require function parameters to be typed as certain immutability | βοΈ β
π | π§ | π‘ | π | |||
| prefer-readonly-type | Prefer readonly types over mutable types. | π§ | π | β | ||||
| type-declaration-immutability | Enforce the immutability of types based on patterns. | βοΈ β
π | π§ | π‘ | π |
| NameΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β | Description | πΌ | β οΈ | π« | π§ | π‘ | π | β |
|---|---|---|---|---|---|---|---|---|
| no-class-inheritance | Disallow inheritance in classes. | βοΈ β
π | ||||||
| no-classes | Disallow classes. | β
π | βοΈ | |||||
| no-mixed-types | Restrict types so that only members of the same kind are allowed in them. | βοΈ β
π | π | |||||
| no-this-expressions | Disallow this access. | π | βοΈ β |
| Name | Description | πΌ | β οΈ | π« | π§ | π‘ | π | β |
|---|---|---|---|---|---|---|---|---|
| no-conditional-statements | Disallow conditional statements. | β
π | βοΈ | π | ||||
| no-expression-statements | Disallow expression statements. | β
π | βοΈ | π | ||||
| no-loop-statements | Disallow imperative loops. | βοΈ β
π | ||||||
| no-return-void | Disallow functions that don't return anything. | βοΈ β
π | π |
| NameΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β | Description | πΌ | β οΈ | π« | π§ | π‘ | π | β |
|---|---|---|---|---|---|---|---|---|
| prefer-property-signatures | Prefer property signatures over method signatures. | π¨ | π | |||||
| prefer-tacit | Replaces x => f(x) with just f. | π¨ | π‘ | π | ||||
| readonly-type | Require consistently using either readonly keywords or Readonly<T> | π¨ | π§ | π |
In addition to the above rules, there are a few other rules we recommended.
These rules are what are included in the external recommended rulesets.
no-var
Without this rule, it is still possible to create mutable var variables.
no-param-reassign
Don't allow function parameters to be reassigned, they should be treated as constants.
prefer-const
This rule provides a helpful fixer when converting from an imperative code style to a functional one.
@typescript-eslint/prefer-readonly
This rule is helpful when working with classes.
@typescript-eslint/switch-exhaustiveness-check
Although our no-conditional-statements rule also performs this check,
this rule has a fixer that will implement the unimplemented cases which can be useful.
This project started as a port of tslint-immutable which was originally inspired by eslint-plugin-immutable.
FAQs
ESLint rules to promote functional programming in TypeScript.
The npm package eslint-plugin-functional receives a total of 172,441 weekly downloads. As such, eslint-plugin-functional popularity was classified as popular.
We found that eslint-plugin-functional demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket Firewall Enterprise is now available with flexible deployment, configurable policies, and expanded language support.

Security News
Open source dashboard CNAPulse tracks CVE Numbering Authoritiesβ publishing activity, highlighting trends and transparency across the CVE ecosystem.

Product
Detect malware, unsafe data flows, and license issues in GitHub Actions with Socketβs new workflow scanning support.