/** * Widen a type and all its (sub) properties. */ export type DeepWiden = T extends any[] ? DeepWidenArray : T extends object ? DeepWidenObject : Widen; interface DeepWidenArray extends Array> {} type DeepWidenObject = { [P in keyof T]: DeepWiden; };