/** * Strip null/undefined from a type and all its (sub) properties. */ export type DeepAssert = T extends any[] ? DeepAssertArray : T extends object ? DeepAssertObject : NonNullable; interface DeepAssertArray extends Array> {} type DeepAssertObject = { [P in keyof T]: DeepAssert; };