These are TypeScript's type-level programming tools — they compute new types from existing ones.
Mapped types — transform each property
A mapped type iterates over the keys of a type and transforms each:
<T> = { [K keyof T]: T[K] };
<T> = { [K keyof T]?: T[K] };
{ : ; : ; }
= <>;
