- TypeScript – Unions and Intersections
A union is a value that is one of these; an intersection is a value that is all of these at once. Why you can only reach the members a union has in common, why an intersection of two conflicting properties gives you never rather than an error, and how a union of string literals replaces a validation function.
- NestJS – Pipes
What a pipe is — transform, validate, or both — the built-in ones worth knowing, and writing your own PipeTransform. Built around a real bug this app had: @Length(1, 80) happily passed three spaces that the service then stored as an empty string, because the validator and the service disagreed about what the value was.
- Java 17 Other Improvements
Six years and three LTS releases separate Java 11 from Java 17. The headline features get their own posts; this one collects the smaller changes that arrived in between and are easy to miss entirely — several of which you have probably already benefited from without noticing. Helpful…
- Dynamic Programming
Solve each subproblem once and remember the answer. The two conditions that have to hold, top-down memoisation versus bottom-up tables, and the jump from O(2^n) to O(n) on Fibonacci. Plus coin change, knapsack, LCS and Kadane's algorithm.
- Angular – Guards, Resolvers and Lazy Loading
Keeping signed-out visitors out of the admin area, and keeping the admin area out of everyone else's download. Functional `CanActivate` guards that return a `UrlTree`, `CanDeactivate` for the checkout page's unpaid order — including how returning a promise lets it ask in a modal instead of `window.confirm` — and `loadComponent` / `loadChildren` lazy loading with proof in the build output.