/** * A type that represents a class constructor */ export type ClassOf = new (...args: any[]) => B; /** * A type that represents an instance of a class (class being a type which is created with ClassOf) */ export type InstanceOf> = B extends ClassOf ? C : never; export type Not = T extends true ? false : true; export type Or = A extends true ? true : B extends true ? true : false; export type And = A extends true ? B extends true ? true : false : false;