deslop/ts-escape-hatch
Disallow TypeScript suppressions that hide type errors.
- Category: Correctness
- 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 typeScriptEscapeHatches on a comment matching one of three kinds: ts-ignore (high confidence: @ts-ignore silently swallows the next line's type errors forever), ts-nocheck (medium: @ts-nocheck disables type checking for the entire file), or ts-expect-error-without-explanation (low: a @ts-expect-error whose trailing text is empty after trimming). Note deslop already excludes any @ts-expect-error that has explanatory text on the same line, so a justified inline suppression will not fire. False positive to SUPPRESS: a @ts-nocheck at the top of a generated or vendored file (e.g. codegen output, a .d.ts shim, a bundled third-party blob) that you do not own and cannot fix at the source — there the file-wide suppression is intentional, not slop.
Fix prompt
Use this once validation confirms the diagnostic is real.
Replace the suppression with a narrowly-scoped, self-documenting one or fix the underlying type. For ts-ignore, swap to @ts-expect-error: <why this is okay> so the suppression breaks loudly once the real error is fixed. For a bare ts-expect-error, append the justification on the same line: // @ts-expect-error: third-party types are wrong, value is always a string. For ts-nocheck, delete it and resolve the actual type errors, or if only a few lines are genuinely unsound, drop a per-line @ts-expect-error: <reason> on each instead of disabling the whole file. If the value is truly untyped, prefer a real cast or type guard (e.g. x as Foo with a comment, or if (isFoo(x))) over blanket suppression. See https://github.com/millionco/deslop-js