brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
typescript-eslinttypescript-eslint - ESLint plugin for TypeScript USE WHEN: user mentions "typescript-eslint", "TypeScript linting", "type-aware rules", asks about "no-floating-promises", "TypeScript ESLint config", "@typescript-eslint rules" DO NOT USE FOR: ESLint 9 full setup - use `eslint-biome` skill, Biome - use `eslint-biome`, general quality - use `quality-common`
Independent GitHub snapshot · Automated classification · Original documentation governs
name: typescript-eslint description: | typescript-eslint - ESLint plugin for TypeScript
USE WHEN: user mentions "typescript-eslint", "TypeScript linting", "type-aware rules", asks about "no-floating-promises", "TypeScript ESLint config", "@typescript-eslint rules"
eslint-biome skill, Biome - use eslint-biome, general quality - use quality-common
allowed-tools: Read, Grep, Globeslint-biome skill for complete configurationeslint-biome skill for Biome setupquality-common for SOLID/Clean Codesonarqube skill for JVM languagesDeep Knowledge: Use
mcp__documentation__fetch_docswith technology:typescript-eslintfor comprehensive documentation.
npm install -D eslint typescript-eslint
import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.recommended,
);
import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.recommendedTypeChecked,
{
languageOptions: {
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname,
},
},
},
);
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.strictTypeChecked,
...tseslint.configs.stylisticTypeChecked,
);
{
rules: {
// Prevent unused variables
'@typescript-eslint/no-unused-vars': ['error', {
argsIgnorePattern: '^_'
}],
// Require explicit return types
'@typescript-eslint/explicit-function-return-type': 'warn',
// Prevent any usage
'@typescript-eslint/no-explicit-any': 'error',
// Require await in async functions
'@typescript-eslint/require-await': 'error',
// Prevent floating promises
'@typescript-eslint/no-floating-promises': 'error',
// Consistent type imports
'@typescript-eslint/consistent-type-imports': 'error',
}
}
export default tseslint.config(
// ... base config
{
files: ['**/*.test.ts', '**/*.spec.ts'],
rules: {
'@typescript-eslint/no-explicit-any': 'off',
},
},
{
files: ['**/*.js'],
...tseslint.configs.disableTypeChecked,
},
);
| Anti-Pattern | Why It's Bad | Correct Approach |
|---|---|---|
| Not using type-aware rules | Misses Promise, async issues | Use recommendedTypeChecked |
Allowing any everywhere | Defeats TypeScript purpose | Set no-explicit-any: error |
No require-await rule | Unnecessary async keywords | Enable type-aware async rules |
| Type checking JS files | JS has no types | Use disableTypeChecked for .js |
| Disabling rules in test files | Tests need quality too | Only disable no-explicit-any if needed |
| Ignoring unused variables | Code smell, unused imports | Use no-unused-vars with ignore pattern |
| Issue | Likely Cause | Solution |
|---|---|---|
| Type-aware rules not working | Missing projectService: true | Add to languageOptions.parserOptions |
| Linting very slow | Type checking all files | Limit type rules to **/*.ts only |
| "Unsafe" errors everywhere | Strict type checking | Use strictTypeChecked or disable specific rules |
| Promise errors not caught | Missing no-floating-promises | Enable in recommendedTypeChecked preset |
| Unused imports not detected | Wrong rule configuration | Use @typescript-eslint/no-unused-vars |
| Rules conflict with Prettier | Both formatting code | Add eslint-config-prettier last |