migrate-to-shoehorn

将测试文件从 `as` 类型断言迁移到 @total-typescript/shoehorn。当用户提到 shoehorn、想在测试中替换 `as`,或需要部分测试数据时使用。

提供方:mattpocock/skills调用次数:2.2k收藏:369更新:2026/08/28

技能说明mattpocock/skills

将测试文件从 `as` 类型断言迁移到 @total-typescript/shoehorn。当用户提到 shoehorn、想在测试中替换 `as`,或需要部分测试数据时使用。

技能简介

migrate-to-shoehorn 是一个帮助开发者将测试文件中的 as 类型断言迁移到 @total-typescript/shoehorn 库的技能。它通过 fromPartial()fromAny() 等类型安全替代方案,解决测试中传部分数据时的类型报错问题,同时消除手写目标类型、双重 as 断言等不良代码习惯。

使用场景

  • 测试中需要构造大型对象,但只关心其中少数属性,不想逐一伪造全部字段。
  • 希望用 as Type 断言让部分数据通过类型检查,但想换成更安全、可维护的写法。
  • 在错误处理测试中有意传入错误类型数据,需用 as unknown as Type 绕过检查的场景。
  • 项目中存在大量 as 断言,需系统性迁移并保持类型安全与自动补全。

使用方法

  1. 安装依赖(原命令保留):
npm i @total-typescript/shoehorn
  1. 在测试文件中导入工具函数:
import { fromPartial, fromAny } from "@total-typescript/shoehorn";
  1. 按以下模式替换断言:
  • as TypefromPartial(...)
  • as unknown as TypefromAny(...)

例如:

// 修改前
getUser({ body: { id: "123" } } as Request);

// 修改后
getUser(fromPartial({ body: { id: "123" } }));
  1. 查找需要迁移的文件:
grep -r " as [A-Z]" --include="*.test.ts" --include="*.spec.ts"
  1. 迁移完成后运行类型检查验证结果。

注意事项

  • 仅限测试代码使用,严禁在生产环境使用 shoehorn。
  • fromPartial() 适合传入仍可通过类型检查的部分数据;fromAny() 适合有意传入错误数据的场景;fromExact() 则用于强制完整对象,可稍后与 fromPartial 互换。
  • 如涉及大量文件,建议逐个文件迁移,避免一次改动过大难以排查。