Skip to main content

Migrating from ts-unused-exports

ts-unused-exports reports exported symbols that are never used in a TypeScript project. rev-dep covers that with unusedExportsDetection, plus orphan files, dependencies, cycles, and architecture rules.

Why migrate​

What carries over, what changes​

  • Covered well: unused exported functions, variables, types, interfaces, enums.
  • --findCompletelyUnusedFiles (files whose every export is unused) maps to rev-dep's orphanFilesDetection.
  • Different model: ts-unused-exports reads your tsconfig files/includes; rev-dep traces from entry points, so define prodEntryPoints/devEntryPoints to keep public-API exports from being reported.

Feature mapping​

ts-unused-exportsrev-dep
unused exportsunusedExportsDetection
--allowUnusedTypes / --allowUnusedEnumsignoreTypeExports: true (types)
--excludeDeclarationFilesignoreFiles: ["**/*.d.ts"]
--ignoreFiles (regex)ignoreFiles (globs)
--ignoreLocallyUseddefault (only cross-file usage counts)
--findCompletelyUnusedFilesorphanFilesDetection
// ts-unused-exports:disable-next-lineignore / ignoreExports in config
--exitWithCountconfig run exits non-zero on findings

Translating your config​

ts-unused-exports is CLI-driven:

ts-unused-exports tsconfig.json --excludeDeclarationFiles --allowUnusedTypes --ignoreFiles="\.stories\."

becomes a rev-dep.config.jsonc:

{
"rules": [
{
"path": ".",
"prodEntryPoints": ["src/index.ts"],
"devEntryPoints": ["**/*.test.ts"],
"unusedExportsDetection": {
"enabled": true,
"autofix": true,
"ignoreTypeExports": true,
"ignoreFiles": ["**/*.d.ts", "**/*.stories.tsx"]
}
}
]
}

--ignoreFiles takes regular expressions; rev-dep uses glob patterns. For per-export exceptions, use ignore/ignoreExports - see unused exports options.

Running it​

# ts-unused-exports
npx ts-unused-exports tsconfig.json

# rev-dep
rev-dep config run
rev-dep config run --fix

Next steps​