export type NonFunctionPropertyNames = { [K in keyof T]: T[K] extends (...args: any[]) => any ? never : K; }[keyof T]; export type PublicProperties = Pick>; export interface Type extends Function { new (...args: any[]): T; }