export type DeepPartial = { [P in keyof T]?: T[P] extends Array ? Array> : T[P] extends ReadonlyArray ? ReadonlyArray> : DeepPartial }; export type KeysOfType = { [P in keyof T]: T[P] extends TProp? P : never}[keyof T]; export type FunctionPropertyNames = { [K in keyof T]: T[K] extends Function ? K : never }[keyof T]; export type FunctionProperties = Pick>; export type NonFunctionPropertyNames = { [K in keyof T]: T[K] extends Function ? never : K }[keyof T]; export type NonFunctionProperties = Pick>; export type DeepWriteable = { -readonly [P in keyof T]: DeepWriteable };