Advanced TypeScript
How the checker really decides, inference in depth, declaration merging, type-level programming, the deliberate soundness holes, and designing types for a library.
Everything before this phase taught you to use the type system. This phase opens it up. You'll see exactly how the checker decides that one type fits another, why some casts are allowed and others refused, how it picks a type when it has several candidates, and why a few holes are left open on purpose.
You'll also learn the tools of people who write types for others to use: declaration merging (adding to a type from another file), type-level programming with tuples and template literal types, and the rules for designing a library's types so the error messages are good and the declaration files build fast.
Every claim here is demonstrated by a live example that the real compiler checks. Where a soundness hole lets a program crash, the console shows the crash, so you can see what the type system promised and what actually happened.
Practise this phase
Hands-on exercises: write the code, see your page live, and press Check to have it tested automatically.