export declare type FuncReturns = (...args: any[]) => T; export declare type PreHook, Y> = (next: NextFunc, ...args: any[]) => Y; export declare type Hooks, Y> = T & { pre(...preHooks: PreHook[]): void; removePre(preHook?: PreHook): void; }; export default function hook, Y>(fn: T & FuncReturns): Hooks & T; export declare type NextFunc, Y> = T & { applySame(): Y; };