Required<T> makes all properties required. Pair it with Partial<T> for inputs that may omit fields and a function that fills in defaults. The result type communicates that nothing is missing after defaulting.
// Example: fill defaults so the return type is fully required
function withDefaults(partial: Partial<Cfg>): Required<Cfg>;
Fill missing config fields and return a fully required config.