migrate-to-shoehorn

软件研发 工程流程 · 其它 类型断言迁移测试 2 文件 EN 原文

把测试里的 as 断言迁到 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.

说明语言:英文

来源Matt Pocockskills ↗ 查看原文件 ↗版权归原作者,请遵循原仓库许可
安装
npx skills add https://github.com/mattpocock/skills --skill migrate-to-shoehorn

需要已安装 skills CLI。也可以直接从源仓库 clone。

在星云中查看 ↗
SKILL.md 原文

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:

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

FunctionUse 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:
  2. What test files have as assertions causing problems?
  3. Are they dealing with large objects where only some properties matter?
  4. Do they need to pass intentionally wrong data for error testing?
  1. Install and migrate:
  2. Install: npm i @total-typescript/shoehorn
  3. Find test files with as assertions: grep -r " as [A-Z]" --include=".test.ts" --include=".spec.ts"
  4. Replace as Type with fromPartial()
  5. Replace as unknown as Type with fromAny()
  6. Add imports from @total-typescript/shoehorn
  7. Run type check to verify
同类技能
codebase-designdomain-modelinggit-guardrails-claude-codegrill-with-docsgrillingimplementimplement-specjust-scrape
本页内容来自开源项目 Matt Pocock, 版权归原作者所有。
本站仅作技能索引与分享,所有 Skill 版权归其原作者所有。