The type to transform.
interface Options {
timeout?: number;
retry?: {
count?: number;
delay?: number;
};
}
// After applying defaults every field is guaranteed to be present
function withDefaults(opts: Options): DeepRequired<Options> {
return {
timeout: opts.timeout ?? 5000,
retry: {
count: opts.retry?.count ?? 3,
delay: opts.retry?.delay ?? 1000
}
};
}
Represents a recursive required type where all nested properties are required.