An opinionated ESLint config to encourage pure(ish), typeful functional programming in TypeScript.
npm install eslint-config-typed-fp


!Snyk Vulnerabilities for GitHub Repo
An opinionated ESLint config to encourage pure(ish), typeful functional programming in TypeScript.
``sh`
yarn add --dev eslint-config-typed-fp \
@typescript-eslint/eslint-plugin \
@typescript-eslint/parser \
eslint \
eslint-plugin-functional \
eslint-plugin-total-functions \
typescript
1. Turn on TypeScript's strict mode and noUncheckedIndexedAccess option.
2. Set up ESLint + TypeScript.
3. Update your .eslintrc.js:
`diff
module.exports = {
+ parser: "@typescript-eslint/parser",
parserOptions: {
+ project: "./tsconfig.json",
+ ecmaVersion: 2018,
+ sourceType: "module"
},
extends: [
+ "typed-fp",
...
],
plugins: [
+ "@typescript-eslint",
+ "functional",
+ "total-functions",
...
],
rules: {
...
}
};
`
Basically,
* the recommended rules from ESLint itself,
* the strict and recommended-requiring-type-checking rules from typescript-eslint,
* the strict rules from eslint-plugin-functional,
* the recommended rules from my own eslint-plugin-total-functions, plus
* a selection of rules _not_ included in the recommended rulesets from all the above to encourage typed, functional programming.
See the extends and rules` sections in index.ts for the details.
Check out the TODOs in index.ts and of course the issues. Contributions welcome.
TypeScript (in)famously considers slavish adherance to type-safety and soundness (at least at the cost of developer ergonomics) a non-goal. With this ESLint config we take the opposite position.
Here's a selection of articles to motivate "why typed FP":
* the case for immutability from immutable-js
* The abject failure of weak typing - Ken Scambler
* No, dynamic type systems are not inherently more open - Alexis King
* Parse, don’t validate - Alexis King
* Types as axioms, or: playing god with static types - Alexis King
* There are more types than classes - Stephen Compall
* Dynamic Languages are Static Languages - Robert Harper
* Static Optimizability from _From first principles: Why I bet on Scala.js_ - Li Haoyi
* From Rust to TypeScript - Alan Darmasaputra
* https://counterexamples.org/
* TypeScript for Functional Programmers
* Typed functional programming in TypeScript (fp-ts)
* https://github.com/danielnixon/eslint-plugin-total-functions
* https://github.com/agiledigital/readonly-types
* https://github.com/eslint-functional/eslint-plugin-functional
* https://github.com/gcanti/fp-ts
* https://github.com/plantain-00/type-coverage (and its strict mode)
* https://github.com/immutable-js/immutable-js
* https://github.com/uhyo/better-typescript-lib