Transform types property by property — readonly, optional, and remapped keys for type-level iteration.
Five passes over the same idea, each from a different angle. Do them in order, or jump to whichever you need.
Mapped types iterate over keys of a type to produce a new type. Syntax: { [K in keyof T]: NewType }. Modifiers (+/- readonly, +/- ?) add or remove property attributes. Key remapping (as clause) renames keys. Mapped types power Partial, Required, Readonly, and Record internally.