deslop/unused-type
Disallow exporting a type/interface that no other module imports (opt-in, requires reportTypes).
- Category: Dead Code
- Severity: warn
- Source:
deslop-js - Framework: global
- Enabled when: react-doctor deadCode analysis enabled (default true); whole-project scan only — skipped in --diff/--staged modes
- Documentation: https://github.com/millionco/deslop-js
Validation prompt
Use this to decide whether a fired diagnostic is real or a false positive.
Fires from deslop's detectDeadExports only when config.reportTypes is enabled (it defaults to false, so a normal scan flags ZERO type-only exports — deslop suppresses them by default as barrel re-export noise per the export type * from "./types" pattern); with reportTypes on, it fires on an export whose isTypeOnly is true (a top-level export type/export interface, or any TSTypeAliasDeclaration/TSInterfaceDeclaration export) that has no usageMap hit for its module-path::name key and is not referenced as a local identifier, where the EXPORTING module itself is reachable and is not a .d.ts declaration file, and the export is neither a * namespace re-export nor an aliased pass-through re-export, and the file is not an entry point unless includeEntryExports is set; the finding carries no kind field. False positive: a published package's public type API where the type is part of the library's external surface and is consumed only by downstream/external consumers (or via generated .d.ts) that the in-project import graph cannot observe — suppress when the file is a real package entry/barrel and the type is intentionally exported for outside callers.
Fix prompt
Use this once validation confirms the diagnostic is real.
If nothing in-repo imports the type, delete the export keyword and keep it local when a same-file declaration still references it (type Foo = ... instead of export type Foo = ...), or remove the declaration entirely when it is fully dead; if it is genuinely public, move it into an entry-point/barrel matched by entryPatterns or run the scan with includeEntryExports so the API surface is treated as intentional rather than dead — and note this type-only check only runs at all when reportTypes is turned on, so leave reportTypes off if you are not auditing a type-heavy package. Stray exported types accumulate as dead surface that misleads readers into thinking they are part of a contract. See https://github.com/millionco/deslop-js
Related rules
More Dead Code rules from the rules reference:
deslop/unused-type-declaration: Disallow exported type declarations (interface / type-alias / enum-type) that are never referenced anywhere in the project.deslop/circular-dependency: Disallow runtime import cycles between modules (A imports B ... imports A).deslop/feature-flag: Disallow stale feature flags that permanently guard dead code.deslop/misclassified-dependency: Move a runtime dep consumed only via `import type` into devDependencies.deslop/re-export-cycle: Disallow import cycles formed by re-export statements (export * / export { } from).