ESLint Configuration for JavaScript/TypeScript Linting
ESLint is a static code analyzer. It catches errors before running, ensures style consistency, prevents anti-patterns. Since version 9 moved to flat config — new configuration format that's easier to read and faster to parse.
Installation
npm install --save-dev eslint @eslint/js typescript-eslint
For React projects additionally:
npm install --save-dev eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-jsx-a11y
eslint.config.mjs (flat config, ESLint 9+)
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
import reactPlugin from 'eslint-plugin-react';
import reactHooks from 'eslint-plugin-react-hooks';
import jsxA11y from 'eslint-plugin-jsx-a11y';
export default tseslint.config(
// Base JS rules
js.configs.recommended,
// TypeScript
...tseslint.configs.recommendedTypeChecked,
{
languageOptions: {
parserOptions: {
project: './tsconfig.json',
tsconfigRootDir: import.meta.dirname,
},
},
},
// React
{
plugins: {
react: reactPlugin,
'react-hooks': reactHooks,
'jsx-a11y': jsxA11y,
},
settings: {
react: { version: 'detect' },
},
rules: {
...reactPlugin.configs.recommended.rules,
...reactHooks.configs.recommended.rules,
...jsxA11y.configs.recommended.rules,
'react/react-in-jsx-scope': 'off', // React 17+ JSX transform
'react/prop-types': 'off', // using TypeScript
},
},
// Custom rules
{
rules: {
// TypeScript
'@typescript-eslint/no-explicit-any': 'warn',
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
'@typescript-eslint/consistent-type-imports': ['error', { prefer: 'type-imports' }],
'@typescript-eslint/no-floating-promises': 'error',
'@typescript-eslint/await-thenable': 'error',
// Common
'no-console': ['warn', { allow: ['warn', 'error'] }],
'prefer-const': 'error',
'no-var': 'error',
},
},
// Ignored files
{
ignores: ['dist/**', 'node_modules/**', '*.config.js', 'coverage/**'],
}
);
Scripts in package.json
{
"scripts": {
"lint": "eslint src",
"lint:fix": "eslint src --fix",
"lint:ci": "eslint src --max-warnings 0"
}
}
--max-warnings 0 in CI — warnings treated as errors, pipeline fails.
Timeline
Basic ESLint setup for React/TypeScript project: 1–2 hours. Full setup with TypeScript type checking, custom rules, pre-commit hooks: 4–6 hours.







