migrate-to-shoehorn SKILL.md skillA
migrate-to-shoehorn from shumingyang-opencode/mattpocock-skills-zh-tw is an agent skill: a SKILL.md folder an AI agent loads when a task calls for it.
mdr add shumingyang-opencode/mattpocock-skills-zh-tw/migrate-to-shoehorn@git:20260806.5bfe60bPins git:20260806.5bfe60b in mdr.lock. Pin the fingerprint instead.
- Audit grade
- A, 17 of 17 checks passed
- Kind
- SKILL.md skill
- Repository
- shumingyang-opencode/mattpocock-skills-zh-tw
- Path
skills/misc/migrate-to-shoehorn/SKILL.md- Versions recorded
- 2
- Latest version
- git:20260806.5bfe60b, committed Aug 6, 2026
- First version recorded
- Apr 28, 2026
- Size
- 2,858 bytes
- Repository stars
- 3
- License
- MIT
將測試檔案從 `as` 型別斷言遷移到 @total-typescript/shoehorn。當使用者提到 shoehorn、想在測試中取代 `as`,或需要部分測試資料時使用。.
Collected from public GitHub. Every version is saved exactly as it was and never changes. Install it at an exact version with the mdr tool, and every file is checked before it reaches your agent. The main file is checked against the SHA-256 fingerprint recorded here, and the others against the fingerprints GitHub keeps for its source commit. The automatic checks below grade the latest version, and the same checks always give the same file the same grade.
What the file says
# 遷移到 Shoehorn
## 為什麼用 shoehorn?
`shoehorn` 讓您可以在測試中傳入部分資料,同時讓 TypeScript 保持滿意。它以型別安全的替代方案取代 `as` 斷言。
**僅限測試程式碼。** 絕不要在正式程式碼中使用 shoehorn。
測試中 `as` 的問題:
- 被訓練成不要使用它
- 必須手動指定目標型別
- 對刻意錯誤的資料使用雙重 `as`(`as unknown as Type`)
## 安裝
```bash
npm i @total-typescript/shoehorn
```
## 遷移模式
### 大型物件但只需要少數屬性
之前:
```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
});
});
```
之後:
```ts
import { fromPartial } from "@total-typescript/shoehorn";
it("gets user by id", () => {
getUser(
fromPartial({
body: { id: "123" },
}),
);
});
```
### `as Type` → `fromPartial()`
之前:
```ts
getUser({ body: { id: "123" } } as Request);
```
之後:
```ts
import { fromPartial } from "@total-typescript/shoehorn";
getUser(fromPartial({ body: { id: "123" } }));
```
### `as unknown as Type` → `fromAny()`
之前:
```ts
getUser({ body: { id: 123 } } as unknown as Request); // wrong type on purpose
```
之後:
…Read the whole file at its exact version.
How to install
mdr add shumingyang-opencode/mattpocock-skills-zh-tw/migrate-to-shoehorn@sha256:7e63dc7f62c12967The line at the top of this page pins the label git:20260806.5bfe60b, which is what most people want. This one pins the sha256 fingerprint of the contents instead, so it survives a label being moved. Either way the exact version is written to mdr.lock, and mdr install downloads and checks those contents again, so it installs them exactly or stops with an error.
[](https://markdownregistry.com/a/art_tewhcbusm6himy52)
3 badge image fetches in 30 days. What the badge shows.
Versions
The registry has recorded 2 versions of this file, between Apr 28, 2026 and Aug 6, 2026, about one every 100 days.
| version | committed | commit | size | audit | |
|---|---|---|---|---|---|
| git:20260806.5bfe60b latest | 2026-08-06 | 5bfe60b | 2,858 B | A | view · diff |
| git:20260428.62f43a1 | 2026-04-28 | 62f43a1 | 2,795 B | A | view |
Audit of the latest version
- pass: Frontmatter block present
- pass: Frontmatter declares a name
- pass: Frontmatter declares a description
- pass: Size between 200 bytes and 200 KB (2858 bytes)
- pass: No zero-width or bidi control characters
- pass: No instruction hidden inside an HTML comment
- pass: No link to an exfiltration or paste host
- pass: No credential-shaped string
- pass: No instruction to send local credentials anywhere
- pass: No text hidden with inline styles
- pass: No prompt-injection phrasing
- pass: No curl or wget piped into a shell
- pass: No recursive delete of root, home or parent
- pass: No instruction to read or print local credentials
- pass: No base64 blob over 200 characters
- pass: No link to a raw IP address
- pass: No script tag
Source
shumingyang-opencode/mattpocock-skills-zh-tw · 3 stars · license MIT · pushed 2026-10-07 · branch main
API
GET https://markdownregistry.com/api/v1/artifacts/art_tewhcbusm6himy52 GET https://markdownregistry.com/api/v1/resolve?ref=shumingyang-opencode/mattpocock-skills-zh-tw/migrate-to-shoehorn GET https://markdownregistry.com/api/v1/blob/7e63dc7f62c12967a90843826d03a548246616b8e4cfd1a3659b780e31e39dbc
Your AI assistant does the legwork. You hear about the deals worth your word. Hand yours the standing instructions at modelranch.com and it joins the network that reads files like this one.
Guides: the SKILL.md format and its required fields · what to check before you install a skill · how to pin a skill to an exact version · where to find agent skills · keeping a team on the same skills · which agent file does what.
More from shumingyang-opencode/mattpocock-skills-zh-tw
Every file in shumingyang-opencode/mattpocock-skills-zh-tw