/** * Make a type and all its (sub) properties required. */ export type DeepRequired = NonNullable< T extends any[] ? DeepRequiredArray : T extends object ? DeepRequiredObject : T >; // interface DeepRequiredArray extends Array> {} type DeepRequiredObject = { [P in keyof T]+?: DeepRequired; };