SuperAPI AI 工具集

neverthrow-wrap-exceptions

编程与开发

查看项目

更新于 10-15 20:13

技能介绍

用途:在 TypeScript 和 JavaScript 代码中,用 neverthrow 辅助函数捕获可恢复异常,替代临时性的 try/catch。该技能只负责异常捕获;若任务还涉及修改公开返回签名,需配合 neverthrow-return-types 使用。

主要能力:识别失败进入代码的位置,包括手写 try/catch、仅用于转换的 .catch(...)、已知会抛错的 API 调用、可能 reject 的 Promise 函数,并检查第三方库、解析器、数据库客户端、网络客户端、文件系统辅助、schema 校验与序列化代码。按失败形态选择包装器:同步可能抛错用 Result.fromThrowable 或 fromThrowable;返回 Promise 但调用本身可能抛错用 ResultAsync.fromThrowable;已有 PromiseLike 值用 ResultAsync.fromPromise 或 fromPromise。不要包装已返回 Result 或 ResultAsync 的 API,应直接用 map、mapErr、andThen、asyncAndThen、orElse 组合。

使用方式:始终传入错误映射函数,使 Err 侧具有已知类型;优先使用稳定的领域错误,而非 unknown、any 或泛型字符串;在可抛错或 reject 操作附近只包装一次,避免嵌套包装;替换仅用于转换的 .catch(...) 链;不要用 Promise.resolve、Promise.reject 或自定义包装对象手动模拟 ResultAsync。示例:const parseConfig = Result.fromThrowable(JSON.parse, (error) => ({ type: 'ConfigParseError', cause: error }));const fetchUser = ResultAsync.fromThrowable(apiClient.getUser, (error) => ({ type: 'UserFetchError', cause: error }));function readBody(): ResultAsync<RequestBody, BodyReadError> { return ResultAsync.fromPromise(request.json(), toBodyReadError) }。

适用场景:需要将同步抛错、Promise 函数抛错或已有 Promise 拒绝统一转换为显式错误类型的代码。

限制:仅在 neverthrow 辅助函数适用时避免新增手写 try/catch;当清理流程需要 finally、框架边界必须拦截并转换异常,或语言结构无法用包装器清晰表达时,可保留 try/catch,但应放在最窄边界并立即转换为 Err 或框架原生响应,不得让捕获值以未类型化 unknown 在代码库中流动。完成前应验证包装器选择与真实失败形态一致、错误映射产生显式类型,并对剩余 try/catch 说明真实约束;在安全且范围内运行测试、lint 或类型检查。其他细节暂未提供。