Day 21/90: Practice — typed event emitter
90 Day TypeScript Challenge: Zero to Production
Today I wanted typed event emitter to feel like a real engineering decision, not a syntax demo. The useful shift was turning the type system into a working guardrail for a small but realistic product build.
The checks that mattered were decide which types are shared, which are local, and which should never cross a boundary, keep input, persistence, cache, and UI shapes aligned on the risky path first, and choose one or two failure cases to model properly instead of pretending the whole app is already polished.
The failure mode I was actively trying to avoid was building the feature first and bolting types on after the boundaries have already drifted. That is usually the moment a typed codebase starts looking safe while still carrying fuzzy contracts underneath.
Project days are where TypeScript stops being theory.…