Skip to content
alyn
mxyhi

Migrate To Shoehorn skill

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.

$npx skills add mxyhi/ok-skills --skill migrate-to-shoehorn
View this skill on GitHubmxyhi/ok-skills/migrate-to-shoehorn/SKILL.md
Pack stars
514
Pack installs
4.2k
Alyn Score
52/99
Updated
3 days ago
License
Apache-2.0
– views – installs via Alyn

Install Migrate To Shoehorn

Pick your agent. Every command is ready to paste.

$npx skills add mxyhi/ok-skills --skill migrate-to-shoehorn

The open skills CLI detects your agents (Claude Code, Cursor, Codex and 70+ more) and installs to the right folder. Add -g to install globally.

01

Install it

Run the command above, or upload the folder in Claude.

02

Ask naturally

Describe the task. Your agent loads migrate-to-shoehorn when the request matches its description.

03

Name it if needed

If it does not trigger, say “use the migrate-to-shoehorn skill”. In Codex, type $migrate-to-shoehorn.

The skill itself

SKILL.md

FolderGitHub

Migrate to Shoehorn

Why shoehorn?

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:

  • Trained not to use it
  • Must manually specify target type
  • Double-as (as unknown as Type) for intentionally wrong data

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() Pass partial data that still type-checks
fromAny() Pass intentionally wrong data (keeps autocomplete)
fromExact() Force full object (swap with fromPartial later)

Workflow

  1. Gather requirements - ask user:

    • What test files have as assertions causing problems?
    • Are they dealing with large objects where only some properties matter?
    • Do they need to pass intentionally wrong data for error testing?
  2. Install and migrate:

    • Install: npm i @total-typescript/shoehorn
    • Find test files with as assertions: grep -r " as [A-Z]" --include="*.test.ts" --include="*.spec.ts"
    • Replace as Type with fromPartial()
    • Replace as unknown as Type with fromAny()
    • Add imports from @total-typescript/shoehorn
    • Run type check to verify

Tips for Migrate To Shoehorn

  • • Start a fresh session after installing so your agent picks up the new skill.
  • • It is part of a pack with 30 skills. Install only the ones you need with --skill to keep triggers precise.
  • • If two skills overlap, mention the one you want by name.

Questions about Migrate To Shoehorn

What does the Migrate To Shoehorn skill do?

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.

How do I install Migrate To Shoehorn?

Run "npx skills add mxyhi/ok-skills --skill migrate-to-shoehorn" in your project. The skills CLI installs it for Claude Code, Cursor, Codex and 70+ other agents. In Claude on the web, upload the skill folder as a ZIP under Customize > Skills.

Does Migrate To Shoehorn work in Cursor and Codex?

Yes. Migrate To Shoehorn uses the open SKILL.md format, so it works in Claude Code, Claude, Cursor, OpenAI Codex, Gemini CLI, GitHub Copilot and other agents that support agent skills.

Is Migrate To Shoehorn free?

Migrate To Shoehorn is open source on GitHub under the Apache-2.0 license. It is free to install; check the license before commercial use.

Who made Migrate To Shoehorn?

Migrate To Shoehorn is published by mxyhi in the mxyhi/ok-skills repository, together with 29 other skills.

Similar skills. From other creators.