SuperAPI AI 工具集

ts4023-effect-errors

编程与开发

查看项目

更新于 10-15 21:43

技能介绍

用途:解决导出返回 Effect 的函数时触发的 TS4023 错误。TypeScript 生成 .d.ts 时,若 Effect 错误通道中的错误类型未从源包导出,就会报错;报错信息常提及 Effect 内部类型(如 effect/Cause 的 Channel、Sink、Stream),具有误导性。

主要能力与做法:导出任何 Effect 错误通道中出现的全部错误类型,包括未加 export 的类定义。步骤:一、用 rg "class \w+Error extends (Data|Schema).TaggedError" packages/salesforcedx-vscode-services/src 查找所有 TaggedError 类,注意包含没有 export 关键字的类;二、对未导出的错误类,先在源文件中加 export;三、再从 index.ts 用 export type { ErrorName } from './...' 导出;四、运行 npm run compile -w packages/salesforcedx-vscode-metadata 验证。

为何未导出错误也重要:若某服务方法(如 ensureNonEmptyComponentSet)可能以 EmptyComponentSetError 失败,该错误类型会出现在 Effect 错误通道中,任何调用它的导出函数都会在类型签名中继承该错误,TypeScript 需要在 .d.ts 中命名它。

Knip 误报处理:当错误类在同文件内定义并使用、仅为 TS4023 而导出时,Knip 会标记为“未使用导出”。可在导出处加 /** @ExportTaggedError */ JSDoc 抑制。不要给从 salesforcedx-vscode-services 导出、被其他包消费的错误加该标记。

检查清单:查找所有 TaggedError(含未导出);为 Effect 链中使用的未导出错误类加 export;在 services 的 index.ts 加 export type;编译通过;对仅同包内使用的错误加 JSDoc 抑制 Knip 误报。