| name | migrate-to-shoehorn |
| description | 将测试文件从 `as` 类型断言迁移到 @total-typescript/shoehorn. 当用户提到 shoehorn, "迁移到 shoehorn", 想要替换测试中的 `as` 或需要部分测试数据时使用. |
迁移到 Shoehorn
为什么使用 shoehorn?
shoehorn 允许你在测试中传递部分数据, 同时保持 TypeScript 满意. 它用类型安全的替代方案替换 as 断言.
*仅用于测试代码. * 永远不要在生产代码中使用 shoehorn.
测试中使用 as 的问题:
- 被训练不要使用它
- 必须手动指定目标类型
- 对于故意错误的数据需要双重断言(
as unknown as Type)
安装
npm i @total-typescript/shoehorn
迁移模式
只需要少数属性的大型对象
之前:
type Request = {
body: { id: string };
headers: Record<string, string>;
cookies: Record<string, string>;
};
it("gets user by id", () => {
getUser({
body: { id: "123" },
headers: {},
cookies: {},
});
});
之后:
import { fromPartial } from "@total-typescript/shoehorn";
it("gets user by id", () => {
getUser(
fromPartial({
body: { id: "123" },
}),
);
});
as Type → fromPartial()
之前:
getUser({ body: { id: "123" } } as Request);
之后:
import { fromPartial } from "@total-typescript/shoehorn";
getUser(fromPartial({ body: { id: "123" } }));
as unknown as Type → fromAny()
之前:
getUser({ body: { id: 123 } } as unknown as Request);
之后:
import { fromAny } from "@total-typescript/shoehorn";
getUser(fromAny({ body: { id: 123 } }));
何时使用每个
| 函数 | 用例 |
|---|
fromPartial() | 传递仍然类型检查的部分数据 |
fromAny() | 传递故意错误的数据(保留自动完成) |
fromExact() | 强制完整对象(稍后与 fromPartial 交换) |
工作流程
1.** 收集需求** - 询问用户:
- 哪些测试文件有
as 断言导致问题?
- 他们是否处理只有某些属性重要的大型对象?
- 他们是否需要传递故意错误的数据进行错误测试?
2.** 安装和迁移**: