Agent-skills-standard typescript-tooling
Development tools, linting, and build config for TypeScript. Use when configuring ESLint, Prettier, Jest, Vitest, tsconfig, or any TS build tooling. (triggers: tsconfig.json, .eslintrc.*, jest.config.*, package.json, eslint, prettier, jest, vitest, build, compile, lint)
install
source · Clone the upstream repo
git clone https://github.com/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/typescript/typescript-tooling" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-typescript-tooling-a1d0bb && rm -rf "$T"
manifest:
skills/typescript/typescript-tooling/SKILL.mdsource content
TypeScript Tooling
Priority: P1 (OPERATIONAL)
Implementation Guidelines
- Compiler: Use
for CI builds;tsc
oresbuild
for development.ts-node - Linting: Enforce
withESLint
. Enable@typescript-eslint/recommended
.strict type checking - Formatting: Mandate
viaPrettier
andlint-staged
..prettierrc - Testing: Use
(orVitest
) for unit/integration testing. TargetJest
line coverage.> 80% - Builds: Use
(for library bundling) ortsup
(for web applications).Vite - TypeScript Config: Aim for
long-term. For existing projects withstrict: true
, incrementally enable flags: start withstrict: false
, then addstrictNullChecks: true
,noImplicitAny
. NOT flipstrictFunctionTypes
in one step — it will break hundreds of files.strict: true - CI/CD: Always run
explicitly in build pipeline to catch type errors.tsc --noEmit - Error Supression: Favor
over@ts-expect-error
for documented edge-cases.@ts-ignore
ESLint Configuration
Strict Mode Requirement
Enable
@typescript-eslint/recommended at minimum. When strict: false in tsconfig, no-unsafe-* rules may produce excessive noise — suppress selectively with @ts-expect-error rather than disabling globally. Prefer strict rules in new files even without project-wide strict.
Common Linting Issues & Solutions
Request Object Typing
Problem:
any for Express request objects or duplicate inline interfaces.
Solution: Centralize in src/common/interfaces/request.interface.ts.
import { RequestWithUser } from 'src/common/interfaces/request.interface';
Unused Parameters
Problem: Params flagged as unused by linter. Solution: Prefix with
_ (e.g., _data) or remove. Never eslint-disable.
Test Mock Typing
Problem: Jest mocks trigger
unsafe-type warnings with expect.any() or custom mocks.
Solution: Cast using as unknown as TargetType.
mockRepo.save.mockResolvedValue(result as unknown as User);
Configuration
New projects:
strict: true. Existing (strict: false) — incremental path:
// tsconfig.json — incremental migration { "compilerOptions": { "strict": false, "strictNullChecks": true, "noImplicitReturns": true, "noUnusedLocals": true } }
Verification Workflow (Mandatory)
After editing any
.ts / .tsx file:
- Call
(typescript-lsp MCP tool) — surfaces type errors in real time.getDiagnostics - Run
in CI — catches project-wide errors LSP may miss.tsc --noEmit - Run
— auto-fix formatting and lint violations.eslint --fix
Fallback when typescript-lsp MCP unconfigured: run
directly — it catches same type errors without MCP tool.tsc --noEmit
getDiagnostics fastest feedback loop. Use it before every commit on modified files.
LSP Exploration: Use
getHover to inspect inferred types inline. Use getReferences before renaming any symbol to verify all call sites.
Anti-Patterns
- No
: Use@ts-ignore
— it self-documents intent and fails if the error disappears.@ts-expect-error - No
for request objects: Import centralized interfaces fromany
.src/common/interfaces/ - No
(global): Suppress per-line with inline comment; fix the root cause instead.eslint-disable - No atomic
flip on existing repos: migrate incrementally, starting withstrict: true
.strictNullChecks