typescript-refactor
SKILL.md
TypeScript Refactor Best Practices
Comprehensive TypeScript refactoring and modernization guide designed for AI agents and LLMs. Contains 43 rules across 8 categories, prioritized by impact to guide automated refactoring, code review, and code generation.
When to Apply
Reference these guidelines when:
- Refactoring TypeScript code for type safety and maintainability
- Designing type architectures (discriminated unions, branded types, generics)
- Narrowing types to eliminate unsafe
ascasts - Adopting modern TypeScript 4.x-5.x features (
satisfies,using, const type parameters) - Optimizing compiler performance in large codebases
- Implementing type-safe error handling patterns
- Reviewing code for TypeScript quirks and pitfalls
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Type Architecture | CRITICAL | arch- |
| 2 | Type Narrowing & Guards | CRITICAL | narrow- |
| 3 | Modern TypeScript | HIGH | modern- |
| 4 | Generic Patterns | HIGH | generic- |
| 5 | Compiler Performance | MEDIUM-HIGH | compile- |
| 6 | Error Safety | MEDIUM | error- |
| 7 | Runtime Patterns | MEDIUM | perf- |
| 8 | Quirks & Pitfalls | LOW-MEDIUM | quirk- |
Quick Reference
1. Type Architecture (CRITICAL)
arch-discriminated-unions— Use discriminated unions over string enums for exhaustive pattern matchingarch-branded-types— Use branded types for domain identifiers to prevent value mix-upsarch-satisfies-over-annotation— Usesatisfiesfor config objects to preserve literal typesarch-interfaces-over-intersections— Extend interfaces instead of intersecting types for better error messagesarch-const-assertion— Useas constfor immutable literal inferencearch-readonly-by-default— Default to readonly types for function parameters and return valuesarch-avoid-partial-abuse— AvoidPartial<T>abuse for builder patterns
2. Type Narrowing & Guards (CRITICAL)
narrow-custom-type-guards— Write custom type guards instead of type assertionsnarrow-assertion-functions— Use assertion functions for precondition checksnarrow-exhaustive-switch— Enforce exhaustive switch withnevernarrow-in-operator— Narrow with theinoperator for interface unionsnarrow-eliminate-as-casts— Eliminateascasts with proper narrowing chainsnarrow-typeof-chains— Usetypeofnarrowing before property access
3. Modern TypeScript (HIGH)
modern-using-keyword— Use theusingkeyword for resource cleanupmodern-const-type-parameters— Use const type parameters for literal inferencemodern-template-literal-types— Use template literal types for string patternsmodern-noinfer-utility— UseNoInferto control type parameter inferencemodern-accessor-keyword— Useaccessorfor auto-generated getters and settersmodern-verbatim-module-syntax— EnableverbatimModuleSyntaxfor explicit import types
4. Generic Patterns (HIGH)
generic-infer-over-annotate— Let TypeScript infer instead of explicit annotationgeneric-constrain-dont-overconstrain— Constrain generics minimallygeneric-avoid-distributive-surprises— Control distributive conditional typesgeneric-mapped-type-utilities— Build custom mapped types for repeated transformationsgeneric-return-type-inference— Preserve return type inference in generic functions
5. Compiler Performance (MEDIUM-HIGH)
compile-explicit-return-types— Add explicit return types to exported functionscompile-avoid-deep-recursion— Avoid deeply recursive type definitionscompile-project-references— Use project references for monorepo buildscompile-base-types-over-unions— Use base types instead of large union types
6. Error Safety (MEDIUM)
error-result-type— Use Result types instead of thrown exceptionserror-exhaustive-error-handling— Use exhaustive checks for typed error variantserror-typed-catch— Type catch clause variables asunknownerror-never-for-unreachable— Useneverto mark unreachable code pathserror-discriminated-error-unions— Model domain errors as discriminated unions
7. Runtime Patterns (MEDIUM)
perf-union-literals-over-enums— Use union literals instead of enumsperf-avoid-delete-operator— Avoid thedeleteoperator on objectsperf-object-freeze-const— UseObject.freezewithas constfor true immutabilityperf-object-keys-narrowing— AvoidObject.keystype wideningperf-map-set-over-object— UseMapandSetover plain objects for dynamic collections
8. Quirks & Pitfalls (LOW-MEDIUM)
quirk-excess-property-checks— Understand excess property checks on object literalsquirk-empty-object-type— Avoid the{}type — it means non-nullishquirk-type-widening-let— Prevent type widening withletdeclarationsquirk-variance-annotations— Use variance annotations for generic interfacesquirk-structural-typing-escapes— Guard against structural typing escape hatches
How to Use
Read individual reference files for detailed explanations and code examples:
- Section definitions — Category structure and impact levels
- Rule template — Template for adding new rules
Reference Files
| File | Description |
|---|---|
| references/_sections.md | Category definitions and ordering |
| assets/templates/_template.md | Template for new rules |
| metadata.json | Version and reference information |
Weekly Installs
52
Repository
pproenca/dot-skillsGitHub Stars
70
First Seen
Feb 11, 2026
Security Audits
Installed on
codex48
gemini-cli47
github-copilot47
opencode46
kimi-cli46
amp45