Skip to content
alyn
vinvcn

Migrate To Shoehorn skill

将测试文件从 `as` 类型断言迁移到 @total-typescript/shoehorn。适用于用户提到 shoehorn、想替换测试中的 `as`,或需要局部测试数据时。

$npx skills add vinvcn/mattpocock-skills-zh-CN --skill migrate-to-shoehorn
View this skill on GitHubvinvcn/mattpocock-skills-zh-CN/skills/misc/migrate-to-shoehorn/SKILL.md
Pack stars
5,675
Pack installs
188k
Alyn Score
67/99
Updated
15 h ago
License
MIT
– views – installs via Alyn

Install Migrate To Shoehorn

Pick your agent. Every command is ready to paste.

$npx skills add vinvcn/mattpocock-skills-zh-CN --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

迁移到 Shoehorn

为什么用 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)

安装

npm i @total-typescript/shoehorn

迁移模式

只需要少数属性的大型 objects

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 } }));

何时使用哪一个

Function Use case
fromPartial() 传入仍能 type-check 的 partial data
fromAny() 传入故意错误的数据(保留 autocomplete)
fromExact() 强制 full object(之后可换成 fromPartial)

工作流

  1. Gather requirements - 询问用户:

    • 哪些 test files 中的 as assertions 造成问题?
    • 是否在处理大型 objects,但只关心部分 properties?
    • 是否需要传入故意错误的数据来测试 error paths?
  2. Install and migrate:

    • Install: npm i @total-typescript/shoehorn
    • 查找 test files 中的 as assertions: 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 验证

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?

将测试文件从 `as` 类型断言迁移到 @total-typescript/shoehorn。适用于用户提到 shoehorn、想替换测试中的 `as`,或需要局部测试数据时。

How do I install Migrate To Shoehorn?

Run "npx skills add vinvcn/mattpocock-skills-zh-CN --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 MIT license. It is free to install; check the license before commercial use.

Who made Migrate To Shoehorn?

Migrate To Shoehorn is published by vinvcn in the vinvcn/mattpocock-skills-zh-CN repository, together with 29 other skills.

Similar skills. From other creators.