← ClaudeAtlas

type-keeperlisted

按 TS 类型安全规范修复存量代码——清除 any、替换 @ts-ignore、消除非空断言、import type、type/interface 场景校正、泛型约束、外部数据运行时校验。改动按风险分级:编译期语义直接做、行为等价验证后做、运行时校验列清单,tsc --noEmit 全绿为交付门禁。当用户要求修复类型安全、清理 any、执行类型规范、消除 @ts-ignore 时使用。
fongzhizhi/claude-skill-lab · ★ 1 · AI & Automation · score 77
Install: claude install-skill fongzhizhi/claude-skill-lab
# type-keeper 修复存量代码的类型安全问题,使其符合 TS 类型安全规范。核心原则:**让编译器替你抓错误,而不是绕过它**——类型改动以 `tsc --noEmit` 为硬门禁,编译不绿不交付。 ## 参考规范(开始前必须加载) 按顺序读取以下两份文档,作为本次调整的唯一依据: 1. `~/.claude/rules/ts-types.md` —— 强制规则(精简版) 2. `~/.claude/docs/ts-types-guide.md` —— 类型安全详细指南(快速参考卡片、收窄策略、运行时校验、反模式示例) 若第二份缺失,提示用户先运行 `lab deploy docs/ts-code-guide`,不跳过规范直接动手。 ## 确定改动范围 ### 模式一:默认(git diff 变更文件) ```bash git diff --name-only HEAD # 已暂存 + 未暂存的修改 git status --porcelain # 检出 untracked 新增文件 ``` 合并结果,过滤出 `.ts` / `.tsx` / `.d.ts` 文件(含 `.test.ts` / `.spec.ts`),排除 `node_modules/`、构建产物目录。无 TS 文件时告知用户并结束。 ### 模式二:手动指定 | 参数 | 处理方式 | | --- | --- | | 文件路径 | 只处理该文件 | | 目录路径 | 递归处理目录下所有 `.ts` / `.tsx` / `.d.ts`(排除 `node_modules/`、构建产物) | ## 逐文件修复流程 对每个文件对照规则逐项扫描,**按风险分级处理**: ### 低风险(编译期语义,直接做) 1. **`@ts-ignore` → `@ts-expect-error` + FIXME 说明**:若该行报错已消除则直接删除整行指令;替换后若出现"未使用的 ts-expect-error"报错,说明问题已修复,删除指令即可 2. **值导入引用类型 → `import type`**(仅作类型引用时;值与类型混用时不可拆) 3. **type / interface 场景校正**:仅被实现/扩展、对外 API 响应用 `interface`;联合/元组/映射类型用 `type`;React Props 用 `type`。纯类型别名互换编译期等价 4. **泛型补 `extends` 约束**:消除隐式 any;`any` 泛型默认值改为 `unknown` 或具体类型 5. **双重断言 `as unknown as X`**:确有必要的补注释说明原因;可避免的(如先收窄再断言)重构为收窄路径 ### 中风险(需行为等价验证,验证通过才做) 6. **显式 `any` → `unknown` + 收窄**(指南第二章): - 函数参数/返回值的 `any` → `unknown`,函数体内用 `typeof` 检查 / 类型守卫 / 判别联合收窄到确定类型后再使用 - `any` 返回值不得继续传播(指南禁止行为)——收窄后下游调用点同步核对类型 - **等价验证**:收窄分支必须覆盖原有调用路径的所有输入形态;输入形态无法确定时,保留宽松处理并列待确认清单,不臆造校验逻辑 7. **非空断言 `!` 消除**(指南第五章):优先用运行时校验或收窄替代;`asserts` 守卫函数适用于"先校验