An ESLint shareable config for TypeScript that is based on eslint-config-standard and has TypeScript specific rules from @typescript-eslint/eslint-plugin.
This package specifies the following peerDependencies:
- TypeScript, which you may already have installed
- ESLint
- 3 Peer dependencies of eslint-config-standard
- @typescript-eslint/eslint-plugin; ESLint rules for TypeScript.
Yes, this is a large number of peerDependencies.
This is due to a known limitation in ESLint.
This package has @typescript-eslint/parser in dependencies.
And it has @typescript-eslint/eslint-plugin in peerDependencies.
Both are specified as ranges.
It's probably safest for the installed versions of these packages to be the same.
This can be achieved by:
- Pin (exact version) the
@typescript-eslint/eslint-plugininpackage.json. - Have a
package-lock.jsonwhich locks the version of the@typescript-eslint/parsersub-dependency.
And both pin/lock to the same version.
npm@<7 does not automatically install peerDependencies,
so if that's what you're using, install them manually.
Here is an example, but use it only for reference,
because your decisions regarding version ranges and range specifiers may vary.
npm install --save-dev \
typescript@\* \
eslint@^8.0.1 \
eslint-plugin-promise@^6.0.0 \
eslint-plugin-import@^2.25.2 \
eslint-plugin-n@^15.0.0 \
@typescript-eslint/eslint-plugin@^6.1.0 \
eslint-config-standard-with-typescript@latest
Here is an example .eslintrc.js.
Pay close attention to the files property, because it determines which files are linted.
module.exports = {
overrides: [
{
files: ['*.js', '*.jsx', '*.ts', '*.tsx'],
extends: 'standard-with-typescript'
}
],
}Note: the config exported by this package sets parserOptions.project = true.
Read about the project option here.
There are some more parserOptions you may care about.
$ npx eslint .