Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Migrate test files from `as` type assertions to @total-typescript/shoehorn. Use when user mentions shoehorn, wants to replace `as` in tests, or needs partial test data.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 21% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -45% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 52% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -33% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -30% | 0% |
shoehorn lets you pass partial data in tests while keeping TypeScript happy. It replaces as assertions with type-safe alternatives.
Test code only. Never use shoehorn in production code.
Problems with as in tests:
as unknown as Type) for intentionally wrong databashnpm i @total-typescript/shoehorn
Before:
tstype 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:
tsimport { fromPartial } from "@total-typescript/shoehorn"; it("gets user by id", () => { getUser( fromPartial({ body: { id: "123" }, }), ); });
as Type → fromPartial()Before:
tsgetUser({ body: { id: "123" } } as Request);
After:
tsimport { fromPartial } from "@total-typescript/shoehorn"; getUser(fromPartial({ body: { id: "123" } }));
as unknown as Type → fromAny()Before:
tsgetUser({ body: { id: 123 } } as unknown as Request); // wrong type on purpose
After:
tsimport { fromAny } from "@total-typescript/shoehorn"; getUser(fromAny({ body: { id: 123 } }));
| Function | Use case | | --------------- | -------------------------------------------------- | | fromPartial() | Pass partial data that still type-checks | | fromAny() | Pass intentionally wrong data (keeps autocomplete) | | fromExact() | Force full object (swap with fromPartial later) |
as assertions causing problems?npm i @total-typescript/shoehornas assertions: grep -r " as [A-Z]" --include="*.test.ts" --include="*.spec.ts"as Type with fromPartial()as unknown as Type with fromAny()@total-typescript/shoehornOther measured skills in the registry, with their headline benchmark lift.