Goal
Eliminate any and as any usage across the codebase. Enable full TypeScript strict mode. Prevent new any from landing without an explicit override comment.
Scope
- tsconfig:
strict: true, noImplicitAny, strictNullChecks, noUncheckedIndexedAccess, exactOptionalPropertyTypes
- ESLint rule
@typescript-eslint/no-explicit-any: error with documented override for third-party type gaps
- Pre-commit hook (Husky + lint-staged) that fails on
any
- For Electron renderer: enforce via the existing electron-vite build
Migration path
- Baseline: count current
any per area (main/, renderer/, shared types)
- Module-by-module conversion, ship behind
// @ts-expect-error TODO(strict) only when blocked by upstream types
- Replace
@ts-expect-error only when upstream types land or a typed shim is added
- After zero
any, enable noImplicitOverride, noFallthroughCasesInSwitch, useUnknownInCatchVariables
Acceptance
grep -r :\s*any --include=*.ts --include=*.vue returns 0 in main/, renderer/src/, and shared types
- ESLint passes with
--max-warnings 0
Effort: medium-to-large, ~1-2 weeks focused work.
Goal
Eliminate
anyandas anyusage across the codebase. Enable full TypeScript strict mode. Prevent newanyfrom landing without an explicit override comment.Scope
strict: true,noImplicitAny,strictNullChecks,noUncheckedIndexedAccess,exactOptionalPropertyTypes@typescript-eslint/no-explicit-any: errorwith documented override for third-party type gapsanyMigration path
anyper area (main/,renderer/, shared types)// @ts-expect-error TODO(strict)only when blocked by upstream types@ts-expect-erroronly when upstream types land or a typed shim is addedany, enablenoImplicitOverride,noFallthroughCasesInSwitch,useUnknownInCatchVariablesAcceptance
grep -r :\s*any --include=*.ts --include=*.vuereturns 0 inmain/,renderer/src/, and shared types--max-warnings 0Effort: medium-to-large, ~1-2 weeks focused work.