Modern TypeScript ESLint configuration with strict type checking and comprehensive stylistic rules. Built for ESLint 9+ flat config with full TypeScript 5.5+ support.
- β¨ ESLint 9 Flat Config - Modern configuration format with better performance
- π― Strict Type Checking - Comprehensive type-aware rules to catch errors at build time
- π¨ Built-in Formatting - Replaces Prettier with @stylistic/eslint-plugin for unified tooling
- π TypeScript 5.5+ Support - Leverages latest TypeScript features and optimizations
- π¦ Zero Config Philosophy - Sensible defaults that work out of the box
- β‘ Performance Optimized - Uses
projectService
for faster type checking
npm install --save-dev @stackvault/eslint-config-typescript eslint typescript
or with Yarn:
yarn add --dev @stackvault/eslint-config-typescript eslint typescript
- Node.js >=18.18.0
- ESLint >=9.22.0
- TypeScript >=5.5.0
Create an eslint.config.js
file in your project root:
import typeScriptConfig from '@stackvault/eslint-config-typescript';
export default [
...typeScriptConfig,
// Your custom rules here
];
import typeScriptConfig from '@stackvault/eslint-config-typescript';
export default [
...typeScriptConfig,
{
rules: {
// Override or add custom rules
'no-console': 'off',
'@typescript-eslint/no-explicit-any': 'warn',
}
}
];
import typeScriptConfig from '@stackvault/eslint-config-typescript';
export default [
...typeScriptConfig,
{
languageOptions: {
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname,
project: ['./packages/*/tsconfig.json'],
}
}
}
];
- Strict type checking with
strictTypeChecked
andstylisticTypeChecked
configs - No unsafe operations - Prevents
any
type pollution - Smart boolean expressions - Allows practical nullish checks while maintaining safety
- Comprehensive async/promise rules - Ensures proper handling of asynchronous code
- Enforced import sorting with eslint-plugin-simple-import-sort
- Consistent type imports - Prefers
import { type User }
syntax - Naming conventions - PascalCase for types/interfaces, T-prefix for generics
- Explicit return types for functions (with smart exceptions)
Built-in formatting rules via @stylistic/eslint-plugin:
- 2-space indentation
- Single quotes
- Semicolons required
- Trailing commas in multiline
- 120 character line limit
- Consistent spacing and formatting
- Test files (
*.spec.ts
,*.test.ts
) - Relaxed rules for testing - JavaScript files - Type checking disabled, basic linting enabled
- Declaration files (
*.d.ts
) - Minimal rules for type definitions
// β Error: no-explicit-any
const data: any = fetchData();
// β
Correct
const data: User = fetchData();
// β
Allowed - practical nullish checks
if (user) { } // User | null
if (isEnabled) { } // boolean | undefined
// β Error - string/number coercion
if (userName) { } // string (use userName !== '')
if (count) { } // number (use count !== 0)
// β Error: no-floating-promises
fetchData();
// β
Correct
await fetchData();
// or
void fetchData();
// β
Automatically sorted and organized
import { type User, type Product } from '@/types';
import { calculateTotal } from '@/utils';
import React from 'react';
Add to .vscode/settings.json
:
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"eslint.experimental.useFlatConfig": true,
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
]
}
{
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"lint:debug": "eslint . --debug",
"type-check": "tsc --noEmit"
}
}
- Remove
.eslintrc.*
files - Create
eslint.config.js
with flat config - Update VSCode settings for flat config
- Remove Prettier (this config handles formatting)
- Use
projectService: true
for better TypeScript performance - Enable ESLint cache:
eslint . --cache
- Exclude build directories in your tsconfig.json
- Consider using
--max-warnings 0
in CI/CD
This configuration prioritizes:
- Type Safety - Catch errors at build time, not runtime
- Consistency - Unified formatting without Prettier
- Performance - Optimized for large TypeScript projects
- Developer Experience - Clear errors with practical rules
MIT
Issues and PRs welcome at GitHub