TypeScript — Make Invalid States Harder to Represent
Move from working JavaScript to explicit compile-time contracts, then learn where runtime validation must take over.
Why TypeScript Exists and What It Cannot Do
Use types to catch mistakes before runtime without confusing types with validation.
Object Types, Unions, Optional Fields, and Narrowing
Describe domain shapes precisely and narrow before accessing variant-specific data.
Generics Without Mystery
Express relationships between input and output types instead of replacing everything with any.
unknown, never, and Exhaustiveness
Use unknown at untrusted boundaries and never to prove all domain cases are handled.
Utility Types and Domain Boundaries
Use Pick/Omit/Partial deliberately instead of making domain entities loosely optional.
Modules, tsconfig, Path Aliases, and Monorepo Type Boundaries
Understand how the compiler finds files and why shared types can create coupling.
TypeScript vs Runtime Validation with Zod
Accept that network JSON is unknown until checked at runtime.
Capstone: Type TaskFlow End-to-End
Apply types across UI state, HTTP contracts, and domain rules without duplicating truths unnecessarily.