export type Keys = keyof O; export type Partial = { [P in keyof T]?: T[P]; }; type IfEquals = (() => T extends X ? 1 : 2) extends () => T extends Y ? 1 : 2 ? A : B; type WritableKeysOf = { [P in keyof T]: IfEquals<{ [Q in P]: T[P]; }, { -readonly [Q in P]: T[P]; }, P, never> & (T[P] extends Function ? never : P); }[keyof T]; type WritablePart = Pick>; export type NFGP = T extends Array ? Array> : T extends object ? { [K in keyof WritablePart]: NFGP[K]>; } : T; type NFPN = { [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]; export type NFP = Pick>; export type NOP = { [K in keyof T]: T[K] extends (object | undefined) ? never : K; }[keyof T]; export type RecursivePartial = { [P in keyof T]?: T[P] extends object ? RecursivePartial : T[P]; }; export {};