ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

TSTL异常体系完全指南:在TypeScript中实现C++风格try/catch异常层级

TSTL异常体系完全指南:在TypeScript中实现C++风格try/catch异常层级 TSTL异常体系完全指南在TypeScript中实现C风格try/catch异常层级【免费下载链接】tstlTypeScript-STL (Standard Template Library, migrated from C)项目地址: https://gitcode.com/gh_mirrors/ts/tstlTSTLTypeScript-STL即 TypeScript 标准模板库将 C 的 STL 完整移植到 TypeScript 世界其内置的异常体系复刻了 Cstd::exception的层级设计让你在 TypeScript 中也能用熟悉的 try/catch 风格精准管理错误。本文将带你看懂这套 C 风格异常层级的全貌并给出可直接套用的选型与捕获技巧。为什么需要在 TypeScript 中使用 C 风格异常TypeScript 原生的Error只有一个类所有错误都混在一起catch到之后只能靠猜。而 TSTL 异常体系把错误按产生原因分类带来三个直接好处精准捕获可以只捕获逻辑错误或只捕获运行时错误不再误伤可预期的语义DomainError、LengthError等类名即文档读代码即知错误类型对齐 C 生态从 C 迁移到 TypeScript 的开发者可以无缝复用既有的异常处理经验。30秒快速上手 TSTL 异常库git clone https://gitcode.com/gh_mirrors/ts/tstl克隆后构建即可使用。项目核心配置见 package.json异常模块入口统一从 src/exception/index.ts 导出全部类型随tstl主包一起提供。TSTL 异常层级全景一张表看懂整个体系只有一个顶层基类 Exception向下分为逻辑错误与运行时错误两大家族异常类型所属分支典型场景源码位置Exception顶层基类自定义异常的根基Exception.tsLogicErrorException程序逻辑缺陷BugLogicError.tsDomainErrorLogicError输入超出数学函数定义域DomainError.tsInvalidArgumentLogicError传入了非法参数InvalidArgument.tsLengthErrorLogicError长度参数非法LengthError.tsOutOfRangeLogicError值超出允许范围OutOfRange.tsRuntimeErrorException运行时不可恢复的错误RuntimeError.tsRangeErrorRuntimeError数值超出可表示范围RangeError.tsOverflowErrorRuntimeError算术上溢OverflowError.tsUnderflowErrorRuntimeError算术下溢UnderflowError.tsSystemErrorRuntimeError系统级错误携带错误码SystemError.ts 一个易混淆点OutOfRange属于逻辑错误参数用错了而RangeError属于运行时错误值超出类型表达能力两者语义不同选型时注意区分。顶层基类 Exceptionname 与 what()Exception 继承自原生Error并做了两件贴心事通过原型修补inheritance polyfill保证instanceof判断在类继承链上始终正确提供name访问器返回具体子类名如DomainError和what()方法返回错误消息完全对齐 C 的std::exception接口。官方测试 test_names.ts 验证了每种异常被捕获后name属性都能正确反映其真实类型——这正是 try/catch 中可靠分类的基础。逻辑错误族 LogicError代码有 BugLogicError及其四个子类表达的是程序自身写错了参数非法、长度越界、超出定义域等。这类错误在测试阶段就应该被消灭属于开发期问题。运行时错误族 RuntimeError环境出了问题RuntimeError及其子类表达的是运行环境导致的失败数值上溢/下溢、值超出表示范围等。这类错误往往无法通过修改逻辑完全避免更适合做降级或重试处理。系统错误 SystemError给错误编号SystemError 在运行时错误之上再封装了一层错误码体系由三个协作类组成ErrorCategory错误分类器负责把数字码翻译成语义消息ErrorCode带分类的错误码ErrorCondition与平台无关的错误条件抽象。SystemError同时支持错误码 消息和数字值 分类器两种构造方式并可通过code()方法随时取回错误码其toJSON()也会自动带上码值方便日志序列化。try/catch 实战如何按类型精准捕获得益于instanceof在继承链上的可靠性你可以像 C 中按类型 catch 一样分层处理import * as std from tstl; try { // 你的业务代码 } catch (error) { if (error instanceof std.LogicError) { console.error(逻辑错误开发期应修复:, error.name, error.what()); } else if (error instanceof std.RuntimeError) { console.error(运行时错误考虑降级处理:, error.what()); } }因为LogicError、RuntimeError都继承自Exception最后一层兜底error instanceof std.Exception即可覆盖 TSTL 抛出的全部错误。选型速查表我该抛哪种异常你想表达的意思推荐抛出参数是垃圾值InvalidArgument长度参数非法LengthError值超出合法范围OutOfRange数学函数定义域外DomainError数值上溢 / 下溢OverflowError/UnderflowError系统级失败且需要错误码SystemError自定义业务异常继承Exception新建子类延伸阅读TSTL 异常体系模块索引基类实现src/exception/Exception.ts逻辑错误分支src/exception/LogicError.ts、src/exception/DomainError.ts、src/exception/InvalidArgument.ts、src/exception/LengthError.ts、src/exception/OutOfRange.ts运行时错误分支src/exception/RuntimeError.ts、src/exception/RangeError.ts、src/exception/OverflowError.ts、src/exception/UnderflowError.ts、src/exception/SystemError.ts错误码三件套src/exception/ErrorCategory.ts、src/exception/ErrorCode.ts、src/exception/ErrorCondition.ts内部基类src/internal/exception/ErrorInstance.ts单元测试src/test/exception/test_names.ts掌握这套 TSTL 异常体系后你的 TypeScript 项目将拥有 C 级别的错误治理能力——用对类型抛出、按层级捕获让每一类错误都各归其位。【免费下载链接】tstlTypeScript-STL (Standard Template Library, migrated from C)项目地址: https://gitcode.com/gh_mirrors/ts/tstl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表