typescript-refactor
TypeScript and TSX refactoring and modernization guidelines from a principal specialist perspective, current to TypeScript 6.0 and React 19. This skill should be used when refactoring, reviewing, or modernizing TypeScript or React/TSX code for type safety, compiler performance, and idiomatic patterns. Triggers on tasks involving type architecture, narrowing, generics, discriminated unions, error handling, React component and hook typing, or migration to modern TypeScript features (satisfies, usi
Install
npx skills add https://github.com/pproenca/dot-skills --skill typescript-refactorTypeScript Refactor Best Practices
Comprehensive TypeScript and TSX refactoring and modernization guide designed for AI agents and LLMs. Contains 47 rules across 9 categories, prioritized by impact to guide automated refactoring, code review, and code generation. Current to TypeScript 6.0 and React 19.
When to Apply
Reference these guidelines when:
- Refactoring TypeScript or React/TSX code for type safety and maintainability
- Designing type architectures (discriminated unions, branded types, generics)
- Narrowing types to eliminate unsafe
ascasts - Typing React components and hooks (props, refs, events, state) in
.tsxfiles - Adopting modern TypeScript 5.x–6.0 features (
satisfies,using, const type parameters, inferred type predicates, erasable syntax,withimport attributes) - Optimizing compiler performance in large codebases (
isolatedDeclarations, project references) - 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 | React & TSX | HIGH | tsx- |
| 5 | Generic Patterns | HIGH | generic- |
| 6 | Compiler Performance | MEDIUM-HIGH | compile- |
| 7 | Error Safety | MEDIUM | error- |
| 8 | Runtime Patterns | MEDIUM | perf- |
| 9 | 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— Replaceaswith runtime-checked guards; TS 5.5+ infers the predicatenarrow-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 chains
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-verbatim-module-syntax— EnableverbatimModuleSyntaxfor explicit import typesmodern-erasable-syntax— Prefer erasable syntax over enums and namespaces for type-strippingmodern-import-attributes— Usewithimport attributes instead of deprecatedassert
4. React & TSX (HIGH)
tsx-avoid-react-fc— Type props directly instead ofReact.FCtsx-ref-as-prop— Passrefas a prop instead offorwardRef(React 19)tsx-extend-native-props— Extend native element props withComponentPropsWithRefinstead of redeclaring themtsx-discriminated-props— Model mutually-exclusive props as discriminated unionstsx-event-handler-types— Type event handlers with React synthetic event typestsx-hook-typing— TypeuseState/useReffor nullable and mutable state
5. Generic Patterns (HIGH)
generic-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
6. 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 typescompile-isolated-declarations— EnableisolatedDeclarationsfor parallel declaration emit
7. 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-discriminated-error-unions— Model domain errors as discriminated unions
8. Runtime Patterns (MEDIUM)
perf-union-literals-over-enums— Use union literals instead of enums — enums are non-erasableperf-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
9. 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-structural-typing-escapes— Guard against structural typing escape hatchesquirk-variance-annotations— Use variance annotations to document generic intent (not for speed)
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 |