只抛出错误
禁止抛出非
Error
值作为异常。
🔒
在 "plugin:@typescript-eslint/strict-type-checked"
的 ESLint 配置 中扩展此规则。
💭
此规则需要 类型信息 才能运行。
建议只 throw
Error
对象本身或使用 Error
对象作为基对象的自定义异常对象。Error
对象的基本好处是它们会自动跟踪其构建和起源位置。
此规则限制了可以抛出作为异常的内容。
从
no-throw-literal
迁移此规则以前称为 no-throw-literal
。我们鼓励用户迁移到新名称 only-throw-error
,因为旧名称将在 typescript-eslint 的未来主要版本中删除。
新名称是具有相同功能的直接替换。
示例
此规则旨在通过禁止抛出字面量和其他不可能是 Error
对象的表达式来维护抛出异常时的一致性。
- ❌ 错误
- ✅ 正确
throw 'error';
throw 0;
throw undefined;
throw null;
const err = new Error();
throw 'an ' + err;
const err = new Error();
throw `${err}`;
const err = '';
throw err;
function getError() {
return '';
}
throw getError();
const foo = {
bar: '',
};
throw foo.bar;
在 Playground 中打开throw new Error();
throw new Error('error');
const e = new Error('error');
throw e;
try {
throw new Error('error');
} catch (e) {
throw e;
}
const err = new Error();
throw err;
function getError() {
return new Error();
}
throw getError();
const foo = {
bar: new Error(),
};
throw foo.bar;
class CustomError extends Error {
// ...
}
throw new CustomError();
在 Playground 中打开如何使用
.eslintrc.cjs
module.exports = {
"rules": {
// Note: you must disable the base rule as it can report incorrect errors
"no-throw-literal": "off",
"@typescript-eslint/only-throw-error": "error"
}
};
在 Playground 中尝试此规则 ↗
选项
参见 eslint/no-throw-literal
选项。
此规则添加了以下选项
interface Options {
/**
* Whether to always allow throwing values typed as `any`.
*/
allowThrowingAny?: boolean;
/**
* Whether to always allow throwing values typed as `unknown`.
*/
allowThrowingUnknown?: boolean;
}
const defaultOptions: Options = {
allowThrowingAny: false,
allowThrowingUnknown: false,
};
何时不使用它
类型检查的 lint 规则比传统的 lint 规则更强大,但也需要配置 类型检查的 lint。如果您在启用类型检查规则后遇到性能下降,请参阅 性能故障排除。