TypeScript
Strict mode, always. Typing is a safety net, not a burden.
Strengths
- Error detection at compile time, not at runtime in front of the user
- Reliable autocompletion and refactoring in any modern editor
- Strict mode enforces best practices: no-any, null checks, immutability
- Type generation from Supabase, Zod, tRPC, single source of truth
Limitations
- Complex tsconfig setup for beginners (strict, paths, moduleResolution)
- Build overhead, transpiler required, poor DX if misconfigured
- Deep generic types become unreadable (inference hell)
Best for
- Any React/Node project with a team or lifespan > 3 months
- APIs, shared libraries, design systems with strict prop contracts