42

Below throw code giving lint error Expected an object to be thrown no-throw-literal

throw { code : 403, message : myMessage };

if i try throw new Error, i am not getting eslint but it gives [Object Object] in the response.

throw new Error({ code : 403, message : myMessage });

Could someone tell me how to fix Expected an object to be thrown error ? without removing eslint config/rules

Munna Babu
  • 5,496
  • 6
  • 29
  • 44

2 Answers2

54
 throw Object.assign(
   new Error(myMessage),
   { code: 402 }
);

Throw a regular error and extend it with custom fields.


You could also write a reusable error class for that:

  class CodeError extends Error {
   constructor(message, code) {
    super(message);
    this.code = code;
   }
 }

 throw new CodeError(myMessage, 404);

That way, you can distinguish the errors easily on catching:

  } catch(error) {
    if(error instanceof CodeError) {
      console.log(error.code);
    } else {
      //...
    }
 }
Community
  • 1
  • 1
Jonas Wilms
  • 132,000
  • 20
  • 149
  • 151
20

Another simple workaround is store on variable and throw.

const errorMessage =  { code : 403, message : myMessage };
throw errorMessage;
Munna Babu
  • 5,496
  • 6
  • 29
  • 44
  • 5
    Webstorm doesn't like this: Local variable 'errorMessage' is redundant. – Turbo May 01 '19 at 00:52
  • This error will not have a stack trace. If that's what you want, it is better to disable the lint rule rather than building a workaround to trick it. – cdauth May 25 '22 at 21:16