migrate-to-shoehorn
将测试文件从 `as` 类型断言迁移到 @total-typescript/shoehorn。当用户提到 shoehorn、想在测试中替换 `as`,或需要部分测试数据时使用。
技能说明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断言,需系统性迁移并保持类型安全与自动补全。
使用方法
- 安装依赖(原命令保留):
npm i @total-typescript/shoehorn
- 在测试文件中导入工具函数:
import { fromPartial, fromAny } from "@total-typescript/shoehorn";
- 按以下模式替换断言:
as Type→fromPartial(...)as unknown as Type→fromAny(...)
例如:
// 修改前
getUser({ body: { id: "123" } } as Request);
// 修改后
getUser(fromPartial({ body: { id: "123" } }));
- 查找需要迁移的文件:
grep -r " as [A-Z]" --include="*.test.ts" --include="*.spec.ts"
- 迁移完成后运行类型检查验证结果。
注意事项
- 仅限测试代码使用,严禁在生产环境使用 shoehorn。
fromPartial()适合传入仍可通过类型检查的部分数据;fromAny()适合有意传入错误数据的场景;fromExact()则用于强制完整对象,可稍后与fromPartial互换。- 如涉及大量文件,建议逐个文件迁移,避免一次改动过大难以排查。