migrate-to-shoehorn

工程开发 社区
解读按原文结构重写,命令、链接、术语均保留;右侧可核对作者原始 SKILL.md

设计思路

migrate-to-shoehorn 是 mattpocock 的「测试代码 as 断言升级」专项 skill——把测试里 as Type / as unknown as Type 替换成 @total-typescript/shoehornfromPartial() / fromAny(),让 TS 仍然开心、又不必虚构整份大对象。只在测试代码里用,永不进生产。

为什么要换 shoehorn

as 在测试里的痛点:

  • 团队规约通常禁用 as
  • 必须手动指定目标类型
  • 故意传错数据时还得 as unknown as Type 双断言

三个迁移模式

1. 大对象只关心少数属性

之前要塞 20 个伪属性才让 TS 闭嘴:

getUser({
  body: { id: "123" },
  headers: {},
  cookies: {},
  // ...还有一堆
});

之后:

import { fromPartial } from "@total-typescript/shoehorn";
getUser(fromPartial({ body: { id: "123" } }));

2. as TypefromPartial() 直接替换。

3. as unknown as TypefromAny() 故意传错类型时用 fromAny——保留 autocomplete。

选哪个

函数 适用场景
fromPartial() 传部分数据但仍需 type-check
fromAny() 故意传错数据(错误路径测试)
fromExact() 强制完整对象(以后想换回 fromPartial 时)

工作流

  1. 收集需求:问用户哪些测试文件 as 出了问题?是不是大对象只用几条字段?是不是要测错误路径?
  2. 安装迁移
    • npm i @total-typescript/shoehorn
    • grep -r " as [A-Z]" --include="*.test.ts" --include="*.spec.ts" 找断言点
    • as TypefromPartial()as unknown as TypefromAny()
    • 补 import
    • 跑 type check 验证

适合谁

  • 用 TypeScript 写测试、被 as 拖累的工程师
  • 在 monorepo 里清理测试代码异味的 Tech Lead
  • 教学/分享 mattpocock 测试套路的人

不适合

  • 项目不在 TS 上——本 skill 与 @total-typescript/shoehorn 绑定
  • 生产代码里塞 as——本 skill 明令仅限测试

配套

tdd / test-driven-development(写测试母法)、improve-codebase-architecture(结构性改 testability)、request-refactor-plan(大批量重构 plan 出口)。

流狐档案 作者与许可取自来源;运行、权限和网络为流狐检测或估算
流狐分类
工程开发
作者声明 Agent
未找到明确声明;不据此推断已兼容或已测试
静态检查
88 / 100 · 启发式扫描,不代表运行安全
作者 / 版本 / 许可
@mattpocock · 未声明 license
流狐 Token 估算
低消耗
流狐接入估算
即装即用
是否需要外部 API Key
未发现要求
检测到的系统要求
macOS · Linux · Windows
底层运行要求
未声明
检测到的文件与系统行为
  • 只读
检测到的网络行为
仅限本地
安装命令数
无(仅作为资料)

档案由构建时根据 SKILL.md 与安装命令自动衍生,可能与作者实际意图存在差异。

需要注意: 未限定 allowed-tools,默认拥有全部工具权限。

输出预览 migrate-to-shoehorn.preview
作者没有在当前 SKILL.md 中定义固定输出样例。

讨论

基于 GitHub Discussions。登录 GitHub 即可参与讨论、点赞、订阅更新。