import { errorObject } from './errorObject'; let tryCatchTarget: Function; function tryCatcher(this: any): any { errorObject.e = undefined; try { return tryCatchTarget.apply(this, arguments); } catch (e) { errorObject.e = e; return errorObject; } finally { tryCatchTarget = undefined; } } export function tryCatch<T extends Function>(fn: T): T { tryCatchTarget = fn; return <any>tryCatcher; }