SuperAPI AI 工具集

ts4023-effect-errors

编程与开发

查看项目

更新于 10-15 21:43

技能介绍

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

主要能力与做法:

  1. 查找所有 TaggedError 类,包括未加 export 的。命令:rg "class \w+Error extends (Data|Schema).TaggedError" packages/<package-name>/src
  2. 对未导出的错误类,先在源文件中加 export。
  3. 再从 index.ts 导出类型,例如:export type { EmptyComponentSetError } from './core/componentSetService';
  4. 验证: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 警告。