A TypeScript utility type that makes all nested object properties optional recursively, while keeping top-level scalar properties required