
Stop Reaching for any: Narrowing unknown in TypeScript
Why unknown is the type-safe replacement for any, and the narrowing patterns that make it practical in real code.
Tags
13 articles · Page 1 of 2

Why unknown is the type-safe replacement for any, and the narrowing patterns that make it practical in real code.

Move beyond try-catch soup: discriminated unions, Result types, and error boundaries that make TypeScript codebases more reliable and maintainable.

The mindset shifts, technical habits, and career decisions that shaped my growth from a junior developer to a senior engineer over seven years in the industry.

Advanced TypeScript patterns I use daily: discriminated unions, branded types, the builder pattern and utility types that keep large codebases safe.

Five years of software engineering distilled: fundamentals over frameworks, trust through reliable delivery, code for the next reader, simplicity over clever.

How to implement structured logging that makes production debugging fast: JSON formats, context propagation, log levels, data masking and aggregation.

How to give code reviews that catch real bugs, share knowledge, and improve team velocity instead of creating bottlenecks.

JWTs are deceptively simple — here's how to avoid the security vulnerabilities, performance traps, and architectural mistakes that plague most implementations.

Feature flags decouple deployment from release — here's how to implement them without creating a tangled mess of conditional logic across your codebase.

Structured logging, log levels, and correlation IDs — the patterns that turn noisy log output into a searchable, actionable observability layer.

Once you know the HTTP verbs, the real challenge begins — pagination, filtering, error formats, and versioning patterns that make APIs a pleasure to consume.

Trunk-based, GitFlow, or something in between — how to pick a Git workflow that scales with your team without drowning in merge conflicts.