ESLint plugin to detect duplicate declaration names across files in your TypeScript/JavaScript projects.
npm install eslint-plugin-no-duplicate-declarations --save-dev
Add to your eslint.config.mjs
:
import { defineConfig } from 'eslint/config'
import noDuplicateDeclarations from 'eslint-plugin-no-duplicate-declarations'
import tsParser from '@typescript-eslint/parser'
export default defineConfig([
{
plugins: {
'no-duplicate-declarations': noDuplicateDeclarations,
},
languageOptions: {
parser: tsParser,
ecmaVersion: 2021,
sourceType: 'module',
},
rules: {
'no-duplicate-declarations/no-duplicate-declarations': 'error',
},
},
])
You can configure which declaration types to check:
"no-duplicate-declarations/no-duplicate-declarations": ["error", {
checkTypes: ["class", "interface", "type"]
}]
"no-duplicate-declarations/no-duplicate-declarations": ["error", {
ignoreTypes: ["variable", "function"]
}]
class
: Class declarations and expressionsinterface
: TypeScript interfacestype
: TypeScript type aliasesenum
: TypeScript enumsfunction
: Function declarationsvariable
: Variable declarations (const, let, var)namespace
: TypeScript namespacesmodule
: TypeScript modules
This plugin includes some preset configurations:
{
extends: ["plugin:no-duplicate-declarations/recommended"]
}
{
extends: ["plugin:no-duplicate-declarations/classesOnly"]
}
{
extends: ["plugin:no-duplicate-declarations/typesInterfaces"]
}
// file1.ts
interface User {
/* ... */
}
// file2.ts
interface User {
/* ... */
} // Error: Duplicate interface name 'User' also defined in file1.ts at line 1
MIT