declare function wrap void>(fun: T): T; interface Func { (this: { i: number; s: string; }, ...args: any[]): any; } declare const funca: Func; declare const funcb: Func;