This rule enforces the use of Error objects in Promise.reject() calls instead of primitive values.
function fetchUser(id: string) {
if (!id) {
- return Promise.reject('Invalid user ID')
+ return Promise.reject(new Error('Invalid user ID'))
}
if (id === 'admin') {
- return Promise.reject('Access denied')
+ return Promise.reject(new Error('Access denied'))
}
return Promise.resolve({ id, name: 'John' })
} function validateInput(input: any) {
if (typeof input !== 'string') {
- return Promise.reject(400)
+ return Promise.reject(new Error('400'))
}
if (input.length < 3) {
- return Promise.reject(422)
+ return Promise.reject(new Error('422'))
}
return Promise.resolve(input)
} function processRequest(data: any) {
if (!data) {
- return Promise.reject(false)
+ return Promise.reject(new Error('No data provided'))
}
if (data.invalid) {
- return Promise.reject(true)
+ return Promise.reject(new Error('Invalid data format'))
}
return Promise.resolve(data)
} function getConfig() {
const config = loadConfig()
if (!config) {
- return Promise.reject(null)
+ return Promise.reject(new Error('Configuration not found'))
}
if (config.error) {
- return Promise.reject(undefined)
+ return Promise.reject(new Error('Configuration error'))
}
return Promise.resolve(config)
} const validateUser = (user: any) => {
if (!user.name) {
- return Promise.reject('Name is required')
+ return Promise.reject(new Error('Name is required'))
}
if (user.age < 18) {
- return Promise.reject('User must be 18 or older')
+ return Promise.reject(new Error('User must be 18 or older'))
}
return Promise.resolve(user)
}This rule only applies to:
- ✅
Promise.reject()calls with primitive values:- String literals (
'error message') - Number literals (
404,500) - Boolean literals (
true,false) nullandundefined- Variables containing primitive values
- Expressions that evaluate to primitive values
- String literals (
This rule does NOT apply to:
- ❌
Promise.reject()with Error objects (new Error(),new TypeError()) - ❌
Promise.reject()with Error subclasses (new RangeError(),new SyntaxError()) - ❌
Promise.reject()with custom Error classes - ❌
Promise.resolve()calls - ❌ Other Promise methods (
.then(),.catch(),.finally()) - ❌
throwstatements - ❌ Non-Promise rejections
The rule provides auto-fix suggestions that wrap primitive values with new Error():
Promise.reject('error')→Promise.reject(new Error('error'))Promise.reject(404)→Promise.reject(new Error(404))Promise.reject(true)→Promise.reject(new Error(true))Promise.reject(null)→Promise.reject(new Error(null))Promise.reject(variable)→Promise.reject(new Error(variable))Promise.reject(expression)→Promise.reject(new Error(expression))