type BasicProperties = { [K in keyof T]: T[K] extends boolean | number | string | Date ? T[K] : never; }; type ComplexProperties = { [K in keyof T]: T[K] extends object | any[] ? T[K] extends Date ? never : T[K] : never; }; type NonNever = { [K in keyof T as T[K] extends never ? never : K]: T[K]; }; export type BasicType = NonNever>; export type ComplexType = NonNever>; type Booleanized = { [K in keyof T]: boolean; }; export type ComplexInclude = Booleanized>;