1/23/2025
Comprehensive guide to TypeScript best practices using shadcn/ui and Next.js, focusing on code style, structure, performance optimization, and error handling.
# TypeScript (shadcn/ui, Next.js)
# TypeScript Best Practices with shadcn/ui and Next.js
## Code Style and Structure
- **Write concise, technical TypeScript code** with accurate examples.
- **Use functional and declarative programming patterns**; avoid classes.
- **Prefer iteration and modularization** over code duplication.
- **Use descriptive variable names** with auxiliary verbs (e.g., `isLoading`, `hasError`).
- **Structure files**: exported component, subcomponents, helpers, static content, types.
## Naming Conventions
- **Use lowercase with dashes for directories** (e.g., `components/auth-wizard`).
- **Favor named exports** for components.
## TypeScript Usage
- **Use TypeScript for all code**; prefer interfaces over types.
- **Avoid enums**; use maps instead.
- **Use functional components with TypeScript interfaces**.
## Syntax and Formatting
- **Use the `function` keyword** for pure functions.
- **Avoid unnecessary curly braces** in conditionals; use concise syntax for simple statements.
- **Use declarative JSX**.
## Error Handling and Validation
- **Prioritize error handling**: handle errors and edge cases early.
- **Use early returns and guard clauses**.
- **Implement proper error logging** and user-friendly messages.
- **Use Zod for form validation**.
- **Model expected errors as return values** in Server Actions.
- **Use error boundaries** for unexpected errors.
## UI and Styling
- **Use Shadcn UI, Radix, and Tailwind Aria** for components and styling.
- **Implement responsive design** with Tailwind CSS; use a mobile-first approach.
## Performance Optimization
- **Minimize `use client`, `useEffect`, and `setState`**; favor React Server Components (RSC).
- **Wrap client components in Suspense** with fallback.
- **Use dynamic loading** for non-critical components.
- **Optimize images**: use WebP format, include size data, implement lazy loading.
## Key Conventions
- **Use `nuqs` for URL search parameter state management**.
- **Optimize Web Vitals** (LCP, CLS, FID).
- **Limit `use client`**:
- **Favor server components and Next.js SSR**.
- **Use only for Web API access** in small components.
- **Avoid for data fetching or state management**.
- **Follow Next.js docs** for Data Fetching, Rendering, and Routing.