Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork2.8k
Description
Before You File a Proposal Please Confirm You Have Done The Following...
- I havesearched for related issues and found none that match my proposal.
- I have searched thecurrent rule list and found no rules that match my proposal.
- I haveread the FAQ and my problem is not listed.
My proposal is suitable for this project
- I believe my proposal would be useful to the broader TypeScript community (meaning it is not a niche proposal).
Link to the rule's documentation
https://typescript-eslint.io/rules/only-throw-error
Description
only-throw-error (andprefer-promise-reject-errors) disallow throwing non-error values.only-throw-error (and with#10375prefer-promise-reject-errors too) can be configured to allow throwingunknown andany types in addition to error values.
It's necessary to enableallowThrowingUnknown so re-throwing a cached error is valid (orany in sometsconfig.json configurations):
functiontest(){try{// ...}catch(error){if(x){thrownewError()}// this would otherwise failthrowerror;}}
While configuringallowThrowingUnknown makes the above pass, it allows potentially unsafe throwing of anunknown type:
functionfoo():unknown{// not necessarily returns an `Error` object}functiontest(){// this should failthrowfoo();}
This issue proposes an additional option, a stricter form ofallowThrowingUnknown, which will allow re-throwing a caught error.
This is relevant both toonly-throw-error andprefer-promise-reject-errors.
Fail
functionfoo():unknown{// not necessarily returns an `Error` object}functiontest(){// this should failthrowfoo();}
Pass
functiontest(){try{// ...}catch(error){if(x){thrownewError()}throwerror;}}
Additional Info
No response