error-type v3.0.0
Create custom error types.
Features
- Simple API:
errorType('errorName') - Follows best practices
- Error properties can be set on initialization:
new CustomError('message', { props: { example: true } }) - Polyfills
error.causeon older Node.js and browsers - Optional custom initialization logic
Examples
Custom error types
import errorType from 'error-type'
const UserError = errorType('UserError')
const DatabaseError = errorType('DatabaseError')
try {
throw new UserError('message')
} catch (error) {
console.log(error.name) // 'UserError'
console.log(error instanceof UserError) // true
}Error properties
const userError = new UserError('message', { props: { userId: 56 } })
console.log(userError.userId) // 56Error cause
// `error.cause` can be used even in older Node.js or browsers
try {
doSomething()
} catch (cause) {
throw new UserError('message', { cause })
}Custom initialization logic
const DatabaseError = errorType('DatabaseError', (error, { props }) => {
error.dbId = props.databaseId
})
const databaseError = new DatabaseError('message', { props: { databaseId: 2 } })
console.log(databaseError.dbId) // 2
console.log(databaseError.databaseId) // undefinedInstall
npm install error-typeThis package is an ES module and must be loaded using
an import or import() statement,
not require().
API
errorType(errorName, onCreate?)
errorName string\
onCreate (error, params) => void\
Return value: CustomError
Custom initialization logic
onCreate(error, params) is optional and is called on
new CustomError('message', params).
By default, it sets any params.props as error properties. However, you can
override it with any custom logic to validate, normalize params, etc.
Best practices
Constructor
A common pattern for custom error types is:
class CustomError extends Error {
constructor(message) {
super(message)
this.name = 'CustomError'
}
}However, this has several issues (which error-type handles):
error.causeis not set- Unlike native error types,
error.nameis:- Enumerable, although it should not. For example,
for (const key in error)will iterate overname, which is unexpected. - Set on the error instance instead of its prototype. In Node.js, this
sometimes results in the error name being printed as
Error [CustomError]instead ofCustomError.
- Enumerable, although it should not. For example,
Polyfills
Some Error polyfills (such as
es-shims/error-cause) prevent
extending from it. This library includes
some logic
to fix this.
Related projects
modern-errors: Handle errors like it's 2022 🔮create-error-types: Create multiple error typeserror-serializer: Convert errors to/from plain objectsnormalize-exception: Normalize exceptions/errorsmerge-error-cause: Merge an error with itscauseerror-cause-polyfill: Polyfillerror.causehandle-cli-error: 💣 Error handler for CLI applications 💥log-process-errors: Show some ❤ to Node.js process errors
Support
For any question, don't hesitate to submit an issue on GitHub.
Everyone is welcome regardless of personal background. We enforce a Code of conduct in order to promote a positive and inclusive environment.
Contributing
This project was made with ❤️. The simplest way to give back is by starring and sharing it online.
If the documentation is unclear or has a typo, please click on the page's Edit
button (pencil icon) and suggest a correction.
If you would like to help us fix a bug or add a new feature, please check our guidelines. Pull requests are welcome!
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago