export type ClassType < T = unknown > = new ( ... args ) => T ; export type InstanceType < T extends ClassType < T > > = T extends ClassType < infer R > ? R : never ; export type FunctionPropertyNames < T > = { [ K in keyof T ] : T [ K ] extends Function ? K : never ; } [ keyof T ] ; export type FunctionProperty < T > = { [ K in keyof T ] : T [ K ] extends Function ? T [ K ] : never ; } [ keyof T ] ;