Try Catch decorators
Try Catch decorators

Try Catch decorators

На самом деле далеко не во всех проектах может понадобиться подобный функционал, но в конкретно моем случае он здорово выручил.

В обычных проектах может понадобиться в качестве логгера для исключений, или там где мы можем использовать значение по-умолчанию если ответ нас не устроил.

В том числе умеет работать и со статическими методами

Пример использования:

class Foo {

  @catchError(logFunction, false, 'defaultValue')
  method1(): string { // return 'defaultValue' and log a error;
    throw new Error('bar');
  }

  @catchError(logFunction, false, 'defaultValue')
  method2(): Promise<string> { // return Promise<'defaultValue'> and log a error;
    return Promise.reject(new Error('bar'));
  }

  @catchError({ catchFunction: logFunction, throwErr: true })
  async method(): Promise<any> { // reject Error('baz') and log function call
    const value = await (async function() { throw new Error('baz'); })();
    return value;
  }

  @catchError(logFunction)
  get property() { // throw Error('deprecated method') and log call function
    throw new Error('deprecated method');
  }

  @catchError(logFunction, false)
  static Method() { // return undefined and log static function call. Cause you haven't define defaultValueOnError.
    return Promise.reject(new Error('baz'));
  }

  @catchError(logFunction)
  static get Property() { // just return 123;
    return 123;
  }
}

Npm package: