例外条款
容易处理出错
本文件介绍的是: Exception class,它提供了处理TypeScript中错误的结构化方法. 它包括自定义属性,例如: code, (中文(简体) ), name,以及 status 用于更详细的错误报告和调试.
目录
概览
这个 Exception 类扩展本地 JavaScript Error 对象,添加自定义字段来改进错误分类和处理。 它还包括一种静态工具方法,用以检查一个物体是否是实例 Exception 课.
开始
运行以下命令开始使用 @alessiofrittoli/exception 在您的项目中:
npm i @alessiofrittoli/exception
或使用 pnpm
pnpm i @alessiofrittoli/exception
发展
运行以下开始开发
nvm use
pnpm i
地方发展
运行以下
pnpm dev
这将生成未忽略的输出代码, 源图并启用源文件监视器 .
生产建设
运行以下来创建本地生产建筑
pnpm build
这将生成没有源代码的已修改输出代码 .
单位测试
通过运行下列程序运行所有定义的测试套件 :
# Run tests and watch file changes.
pnpm test:watch
# Run tests in a CI environment.
pnpm test:ci
进行覆盖测试
然后开始使用 HTTP 服务器服务覆盖文件 ./coverage 文件夹.
您可以在您第一次运行此命令时看到空白页 。 只需刷新浏览器即可看到更新 .
pnpm test:coverage:serve
捐款
献礼真受欢迎!
请参看 贡献文件 了解如何开始为该项目作出贡献的更多信息.
帮助更新此项目 GitHub 赞助商。 。 。 .
警卫
如果你认为你发现了安全漏洞 我们鼓励你 负责地披露此事,不公开问题我们将调查所有合法的报告。 电子邮件 [email protected] 披露任何安全弱点.
API 参考
ExceptionOptions 接口
这个 ExceptionOptions 界面定义 Exception 阶级建筑师.
属性
| 财产 | 类型 | 默认 | 说明 |
|---|---|---|---|
name | string | ExceptionName.Exception | (备选) 错误界面名称 . |
message | string | "未知错误" | (备选) 包含有关错误的技术信息的错误信息 . |
title | string | - 说吧 | (备选) 错误标题 . |
description | string | - 说吧 | (备选) 错误描述 . |
code | T | - 说吧 | (须) 与例外相关的错误代码 . |
isCritical | boolean | false | (可选)表示错误是否为关键错误. |
status | number | - 说吧 | (可选)与例外相关的HTTP状态代码. |
cause | unknown | - 说吧 | (备选) 错误的原因. |
Exception 类
这个 Exception 类扩展 Error 对象和执行 ExceptionOptions 接口.
构造器
构造器初始化一个 Exception 选项.
参数
| 参数 | 类型 | 说明 |
|---|---|---|
options | ExceptionOptions | (须) 包含错误选项的对象. |
示例
import { Exception } from '@alessiofrittoli/exception'
try {
throw new Exception({
message: 'Resource not found'
code: 'ERR:NOTFOUND',
status: 404,
})
} catch (error) {
console.error(error)
}
静态方法
isException
用于检查对象是否为实例的工具方法 Exception 课.
委员会也支持JSON代表联合国 Exception 类(通常通过服务器回复返回).
示例
try {
throw new Exception({ message: 'Something went wrong', code: 'ERR:UNKNOWN' })
} catch (error) {
if (Exception.isException(error)) {
// we can safely access `Exception` properties
console.error(`Error [${error.code}]: ${error.message}`)
} else {
console.error(error)
}
}
import { ExceptionName } from '@alessiofrittoli/exception'
/** Simulates JSON Exception returned by a server JSON Response. */
const error = JSON.parse(
JSON.stringify(
new Exception({
name: ExceptionName.AbortError,
message: 'Exception with custom name.',
code: 0,
}),
),
)
console.log(Exception.isException(error)) // Outputs: true
console.log(new Exception(error)) // Outputs: [Exception]
AbortError 类
这个 AbortError 类扩展 Exception 类 并提供一个预设配置,以便于使用.
构造器
构造器初始化一个 AbortError 选项.
参数
| 参数 | 类型 | 说明 |
|---|---|---|
options | AbortErrorOptions | 包含错误选项的对象. |
它延伸 ExceptionOptions 接口 并省略 name 属性. | ||
这个 code 默认为 ErrorCode.ABORT 但可以选择定制. |
中止错误使用情景
精确中止处理出错
import { AbortError } from '@alessiofrittoli/exception/abort'
try {
const controller = new AbortController()
const { signal } = controller
button.addEventListener('click', () => {
controller.abort(new AbortError({ message: 'User cancelled the request.' }))
})
await fetch(..., { signal })
} catch (error) {
if (AbortError.isException(error)) {
if (AbortError.isAbortError(error)) {
// handle abort error
console.log(error.code) // `error.code` is type of `ErrorCode.ABORT`.
return
}
// handle other Exception errors
return
}
// handle other unknown errors
}
使用自定义中止出错代码
import { AbortError } from '@alessiofrittoli/exception/abort'
enum ApplicationErrorCode {
CUSTOM_CODE = 'ERR:CUSTOM_ABORT_CODE',
}
try {
const controller = new AbortController()
const { signal } = controller
button.addEventListener('click', () => {
controller.abort(
new AbortError({
message: 'User cancelled the request.',
code: ApplicationErrorCode.CUSTOM_CODE,
}),
)
})
await fetch('', { signal })
} catch (error) {
if (AbortError.isException<ApplicationErrorCode>(error)) {
if (AbortError.isAbortError(error, ApplicationErrorCode.CUSTOM_CODE)) {
// handle abort error
console.log(error.code) // `error.code` is type of `CustomAbortCode.CUSTOM_CODE`.
return
}
// handle other Exception errors
return
}
// handle other unknown errors
}
由 所制
|
|
|