migrate-to-shoehorn
将测试文件从 `as` 类型断言迁移到 @total-typescript/shoehorn。适用于用户提到 shoehorn、想替换测试中的 `as`,或需要局部测试数据时。
How do I install this agent skill?
npx skills add https://github.com/vinvcn/mattpocock-skills-zh-cn --skill migrate-to-shoehornIs this agent skill safe to install?
- Gen Agent Trust Hubpass
This skill assists developers in migrating TypeScript tests from unsafe 'as' assertions to the '@total-typescript/shoehorn' library. It uses standard development tools like npm and grep for identification and installation. No malicious patterns or security risks were detected.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
Migrate to Shoehorn
Why shoehorn?
shoehorn 允许你在 tests 中传入 partial data,同时保持 TypeScript 满意。它用 type-safe alternatives 替换 as assertions。
只用于 test code。 永远不要在 production code 中使用 shoehorn。
Tests 中 as 的问题:
- 会训练人忽略类型安全
- 必须手动指定 target type
- 对故意错误的数据需要 double-as(
as unknown as Type)
Install
npm i @total-typescript/shoehorn
Migration patterns
Large objects with few needed properties
Before:
type Request = {
body: { id: string };
headers: Record<string, string>;
cookies: Record<string, string>;
// ...20 more properties
};
it("gets user by id", () => {
// Only care about body.id but must fake entire Request
getUser({
body: { id: "123" },
headers: {},
cookies: {},
// ...fake all 20 properties
});
});
After:
import { fromPartial } from "@total-typescript/shoehorn";
it("gets user by id", () => {
getUser(
fromPartial({
body: { id: "123" },
}),
);
});
as Type → fromPartial()
Before:
getUser({ body: { id: "123" } } as Request);
After:
import { fromPartial } from "@total-typescript/shoehorn";
getUser(fromPartial({ body: { id: "123" } }));
as unknown as Type → fromAny()
Before:
getUser({ body: { id: 123 } } as unknown as Request); // wrong type on purpose
After:
import { fromAny } from "@total-typescript/shoehorn";
getUser(fromAny({ body: { id: 123 } }));
When to use each
| Function | Use case |
|---|---|
fromPartial() | 传入仍能 type-check 的 partial data |
fromAny() | 传入故意错误的数据(保留 autocomplete) |
fromExact() | 强制 full object(之后可换成 fromPartial) |
Workflow
-
Gather requirements — 询问用户:
- 哪些 test files 中的
asassertions 造成问题? - 是否在处理大型 objects,但只关心部分 properties?
- 是否需要传入故意错误的数据来测试 error paths?
- 哪些 test files 中的
-
Install and migrate:
- Install:
npm i @total-typescript/shoehorn - 查找 test files 中的
asassertions:grep -r " as [A-Z]" --include="*.test.ts" --include="*.spec.ts" - 用
fromPartial()替换as Type - 用
fromAny()替换as unknown as Type - 添加来自
@total-typescript/shoehorn的 imports - 运行 type check 验证
- Install:
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/vinvcn/mattpocock-skills-zh-cn/migrate-to-shoehorn">View migrate-to-shoehorn on skillZs</a>