/** * DeepRequired * @desc Required that works for deeply nested structure * @example * // Expect: { * // first: { * // second: { * // name: string; * // }; * // }; * // } * type NestedProps = { * first?: { * second?: { * name?: string; * }; * }; * }; * type RequiredNestedProps = DeepRequired; */ export type DeepRequired = T extends (...args: any[]) => any ? T : T extends any[] ? _DeepRequiredArray : T extends object ? _DeepRequiredObject : T; /** @private */ type _DeepRequiredArray = Array>>; /** @private */ type _DeepRequiredObject = { [P in keyof T]-?: DeepRequired>; }; type NonUndefined = A extends undefined ? never : A; export {};