Developing TypeScript
Expert guidance for building robust, type-safe TypeScript and React applications.
Quick Start
For immediate help, identify your task type and consult the relevant reference:
| Working On | Reference File | Key Topics |
|---|---|---|
| Generics, conditional types, inference | typescript-core | Type system, utility types, declarations |
| Components, hooks, state management | react-architecture | Composition, Context, reducers |
| React 19, Server Components, Actions | react-19-patterns | ref as prop, useActionState, use(), Server Actions |
| Apollo Client, codegen, type safety | graphql-integration | Queries, mutations, cache |
| React Testing Library, integration tests | testing-react | User behavior testing, async |
| Bundle size, memoization, Core Web Vitals | performance-optimization | Code splitting, profiling |
TDD Phase Awareness
All guidance in this skill is phase-aware. Identify your current phase:
RED Phase (Writing Failing Tests)
- •Write the smallest test that captures intent
- •Use concrete values directly in tests
- •Focus on user behavior, not implementation
- •Skip edge cases and complex mocking initially
GREEN Phase (Making Tests Pass)
- •RESIST over-engineering at all costs
- •Start with simple implementations
- •Use
anytemporarily if types block progress - •Focus only on making the current test pass
REFACTOR Phase (Improving Design)
- •NOW apply proper type constraints
- •Extract custom hooks from components
- •Add comprehensive type definitions
- •Improve component composition patterns
Cross-Cutting Principles
These principles apply across all TypeScript/React development:
Type Safety First
- •Prefer compile-time errors over runtime errors
- •Use strict mode and appropriate compiler options
- •Leverage type inference where it improves readability
- •Create discriminated unions for state management
Component Architecture
- •Prefer composition over prop drilling
- •Keep components focused on single responsibilities
- •Use custom hooks to extract reusable logic
- •Push side effects to dedicated hooks or boundaries
Testing Philosophy
- •Test user behavior, not implementation details
- •Write tests that can fail for real defects
- •Avoid over-mocking; prefer integration tests
- •Use React Testing Library queries by accessibility
Performance Mindset
- •Measure before optimizing
- •Understand React's rendering model
- •Use memoization strategically, not reflexively
- •Consider bundle size for every dependency
Examples
Creating a type-safe form component:
User: "I need a reusable form that handles different data types" → Consult typescript-core.md for generics, react-architecture.md for patterns
Optimizing re-renders:
User: "My component re-renders too often" → Consult performance-optimization.md for profiling and memoization strategies
Setting up GraphQL with type safety:
User: "Integrate Apollo Client with TypeScript codegen" → Consult graphql-integration.md for setup and patterns
Writing component tests:
User: "Test this form submission flow" → Consult testing-react.md for user behavior testing patterns
Anti-Patterns to Avoid
Premature Abstraction
- •Creating generic components before you have 3 similar cases
- •Building complex type utilities for one-off uses
- •Over-engineering state management with Context
- •Adding dependency injection patterns unnecessarily
Type System Misuse
- •Using
anyto silence errors instead of fixing types - •Over-constraining types that limit legitimate use cases
- •Creating deep type hierarchies that confuse inference
- •Ignoring TypeScript's structural typing strengths
Testing Anti-Patterns
- •Testing implementation details
- •Over-mocking to the point tests don't catch real bugs
- •Testing React internals instead of user outcomes
- •Creating elaborate test utilities prematurely
Performance Anti-Patterns
- •Premature memoization without measurement
- •useCallback/useMemo on every function/value
- •Splitting code before you have bundle size problems
- •Optimizing renders that aren't causing issues
Reference File IDs
For programmatic access (e.g., parallel reviews), use these identifiers:
typescript-core · react-architecture · react-19-patterns · graphql-integration · testing-react · performance-optimization