export type FilterFlags = { [Key in keyof Base]: Base[Key] extends Condition ? Key : never; }; export type AllowedNames = FilterFlags[keyof Base]; export type SubType = Pick>; export type WithSelf any> = (self: S, ...args: Parameters) => ReturnType; export type FuncOrMethod any> = WithSelf | AllowedNames; export type ClassOf = Function & { prototype: T; }; export type ConstructorOf = { new (...args: any[]): T; prototype: T; };