TypeScript at Staff Level
TypeScript's types are a second language that runs at compile time over the first: it has values (types), operations (unions, intersections, conditionals, mapped types), functions (generics), recursion, and a runtime (the checker) with its own performance characteristics. Most engineers use it as annotations; a staff engineer uses it as a language, to make the compiler reject the states the product must never be in, and knows what the checker is doing when a build takes a minute.
Nine parts: the type system as a lattice with assignability as its ordering; inference and narrowing as control-flow analysis; generics and variance and how parameters are checked; conditional, mapped and template types with their limits; declaration merging and the module systems; the compiler's scanner, parser, binder, checker and emitter with the performance levers; typing a library versus an app; domain modelling with branded types, discriminated unions and parsing instead of validating; and the tooling that holds it together.