interface Macros { [key: string]: Function; } type Macroable = T & I & { macro(name: string, callback: (this: T, ...args: any[]) => any): void; runMacro(name: string, ...args: any[]): any; macros(): Macros; }; declare function macroable(): ClassDecorator; export { type Macroable, type Macros, macroable };