用途:解决导出返回 Effect 的函数时触发的 TS4023 错误。TypeScript 生成 .d.ts 时,若 Effect 错误通道中的错误类型未从源包导出,就会报错;报错信息常提及 Effect 内部类型(如 effect/Cause 的 Channel、Sink、Stream),具有误导性。
主要能力与做法:
- 查找所有 TaggedError 类,包括未加 export 的。命令:rg "class \w+Error extends (Data|Schema).TaggedError" packages/<package-name>/src
- 对未导出的错误类,先在源文件中加 export。
- 再从 index.ts 导出类型,例如:export type { EmptyComponentSetError } from './core/componentSetService';
- 验证:npx tsc --build packages/<package-name> --force
原理:若某服务方法(如 ensureNonEmptyComponentSet)可能以 EmptyComponentSetError 失败,该错误类型会出现在 Effect 错误通道中;任何调用它的导出函数都会在类型签名中继承该错误,TypeScript 需要在 .d.ts 中命名它。
限制与注意:Knip 可能将仅为 TS4023 而导出的错误类标记为“unused exports”,此类警告可忽略;但为跨包消费而导出的错误(如从服务包 index.ts 再导出并被其他包导入)不是误报,应保留。检查清单:查找全部 TaggedError;为 Effect 链中使用的未导出错误类加 export;在服务 index.ts 添加 export type;确保 tsc --build 通过;忽略相关 knip 警告。