skill

Migrate To Shoehorn

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.

mattpocock388,771+ installsVetted

About

# 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

```bash npm i @total-typescript/shoehorn ```

## Migration patterns

### Large objects with few needed properties

Before:

```ts 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:

```ts import { fromPartial } from "@total-typescript/shoehorn";

it("gets user by id", () => { getUser( fromPartial({ body: { id: "123" }, }), ); }); ```

### `as Type` → `fromPartial()`

Before:

```ts getUser({ body: { id: "123" } } as Request); ```

After:

```ts import { fromPartial } from "@total-typescript/shoehorn";

getUser(fromPartial({ body: { id: "123" } })); ```

### `as unknown as Type` → `fromAny()`

Before:

```ts getUser({ body: { id: 123 } } as unknown as Request); // wrong type on purpose ```

After:

```ts 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

Install

Run this command

npx skills add mattpocock/skills

Works with

claude appclaude codeclaude apicursorcodexwindsurfclinezed

Manual steps

Install with `npx skills add mattpocock/skills`, or clone the repository and copy the `skills/misc/migrate-to-shoehorn` folder into your Claude skills directory.

View source

Frequently asked questions

What is the 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.

How do I install Migrate To Shoehorn?

Run this in your terminal:

npx skills add mattpocock/skills
Which AI tools does Migrate To Shoehorn work with?

It works with claude_app, claude_code, claude_api, cursor, codex, windsurf, cline, zed.

Who made Migrate To Shoehorn?

mattpocock.

Is Migrate To Shoehorn free?

Yes, it is free to use.

Related assets

More curated picks in Data & Analytics.

All Migrate To Shoehorn alternatives →
skillclaude_appclaude_codeclaude_api
npx skills add heygen-com/hyperframes
Hyperframes Registry
Search, install, and wire registry blocks and components into HyperFrames compositions. Use BEFORE hand-building any named visual — whenever a brief,…622,896+
skillclaude_appclaude_codeclaude_api
npx skills add microsoft/azure-skills
Microsoft Foundry
Build, deploy, evaluate, optimize, fine-tune, and manage Microsoft Foundry agents, models, and resources end to end. USE FOR: foundry, azd ai agent, a…618,228+
skillclaude_appclaude_codeclaude_api
npx skills add microsoft/azure-skills
Azure Storage
Azure Storage Services including Blob Storage, File Shares, Queue Storage, Table Storage, and Data Lake. Answers questions about storage access tiers…606,705+
skillclaude_appclaude_codeclaude_api
npx skills add microsoft/azure-skills
Azure Kusto
Query and analyze data in Azure Data Explorer (Kusto/ADX) using KQL for log analytics, telemetry, and time series analysis. WHEN: KQL queries, Kusto d…605,770+
skillclaude_appclaude_codeclaude_api
npx skills add mattpocock/skills
Wizard
Generate an interactive bash wizard that walks a human through steps only they can perform. Use when provisioning infrastructure, setting up credentia…424,988+
skillclaude_appclaude_codeclaude_api
npx skills add google/agents-cli
Google Agents CLI Observability
This skill should be used when the user wants to "set up tracing", "monitor my agent", "configure logging", "add observability", "debug production tra…357,631+

Audit before you install

Run any source through our checks - AI visibility, security, performance, and stack detection.

More in Data & Analytics