export type DeepNonNullable = T extends (...args: Array) => any ? T : T extends Array ? DeepNonNullableArray : T extends object ? DeepNonNullableObject : T; export type DeepNonNullableArray = Array>>; export type DeepNonNullableObject = { [P in keyof T]-?: DeepNonNullable>; };