You can easily define your own RecursivePartial type, which will make all properties, including nested ones, optional:
type RecursivePartial<T> = { [P in keyof T]?: RecursivePartial<T[P]>; };
If you want some of your properties to be partial, you can use this with intersection and Pick :
type PartialExcept<T, K extends keyof T> = RecursivePartial<T> & Pick<T, K>;
This will make everything optional, with the exception of the keys specified in parameter K
Crice source share